所以我有一个小问题:
使用 MQTT 发送消息,它由一系列使用 C# 中的 protobuf-net 序列化的对象组成(我无法修改此代码,但我可以访问源代码)。在另一端,我收到了 Java 中的序列化对象,问题是我似乎无法使用 protobuf 反序列化对象,如果有人遇到过这个问题并解决了它,请帮助 :)
C# 中的对象示例:
using ProtoBuf;
namespace Concentrator.Services
{
[ProtoContract]
public class MeterID
{
private byte[] _id;
[ProtoMember(1)]
public byte[] ID
{
get { return _id; }
set { _id = value.Length == 16 ? value : null; }
}
[ProtoMember(2)] public string MeterType;
}
}
我尝试在 Java 中重新创建相同的对象(.proto 文件):
syntax = "proto2";
package mqtt.entity;
option java_package = "mqtt.entity";
option java_outer_classname = "ProtoMeter";
message Meter {
optional bytes ID = 1;
optional string MeterType = 2;
}
message MeterID {
repeated Meter mid = 1;
}
这个例子的解决方案将是一个巨大的帮助,非常感谢。
在 C# 中反序列化对象的代码:
var ms = new MemoryStream(data, 7, data.Length - 9)
var res = Serializer.Deserialize<List<MeterID>>(ms);
这在 C# 中有效,我正在尝试在 java 中实现相同的目标