我有一个使用 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 和前缀样式 128,如下所示
IEnumerable<SomeObject> list = (Serializer.DeserializeItems<SomeObject>(memoryStream, PrefixStyle.Base128, 0));
但我们仍然收到错误。今天,当我们在 C# 端调用 getProto 时,它似乎正在将设置为 double 类型的属性转换为fixed64 类型,在 java 端我们指定了 double,所以我认为这种不匹配导致了我们看到的错误。我们暂时将这些字段更改为字符串类型,现在上面的代码片段可以工作了。当然,理想情况下我们不想在不必要的时候发送字符串。