1

我有一个使用 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); 
}

注意:我看到了一篇较旧的帖子,但它看起来很过时,我认为从那时起 protobuf-net 发生了变化,但如果我错了,请纠正

4

1 回答 1

1

开发人员昨天曾经使用标签 0 和前缀样式 128,就像这样

IEnumerable<SomeObject> list =  (Serializer.DeserializeItems<SomeObject>(memoryStream, PrefixStyle.Base128, 0));

但我们仍然遇到错误。当我们今天在 C# 端调用 getProto 时,它似乎正在将我们设置为 double 类型的属性转换为 fixed64 类型,在 java 端我们指定了 double 所以我认为这种不匹配导致了我们看到的错误。我们暂时将这些字段更改为字符串类型,现在上面的代码片段可以工作了。当然,理想情况下,我们不想在不需要时发送字符串。

于 2010-09-16T18:40:14.090 回答