我有一个使用protobuf发送消息的java后端,它在tib上的一个大字节数组blob中发送分隔的消息对象。我可以使用java中的函数parseDelimitedFrom(yourStreamHere)对它们进行反序列化,但是在C#方面我们遇到了一些问题而且我找不到任何示例,但我可能只是遗漏了一些明显的东西。
我们正在用C#做这样的事情
using (MemoryStream mem = new MemoryStream())
{
mem.Write(byteArray, 0, byteArray.Length);
mem.Position = 0;
return Serializer.Deserialize<List<OrderState>>(mem);
}
注意:我在此看到了一个较旧的post,但它看起来相当过时了,我认为自那时起protobuf-net发生了变化,但如果我错在那里就更正了
答案 0 :(得分:1)
开发人员昨天在某一点上使用标记0和前缀样式128,如此
IEnumerable<SomeObject> list = (Serializer.DeserializeItems<SomeObject>(memoryStream, PrefixStyle.Base128, 0));
但我们仍然收到错误。今天我们在C#端调用getProto时,似乎它将我们设置为double类型的属性转换为fixed64类型,在java方面我们指定了double,所以我认为这种不匹配导致了我们看到的错误。我们暂时将这些字段更改为字符串类型,现在上面的代码段正常工作。当然,理想情况下,当我们不需要时,我们不想发送字符串。