我有一个使用 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,所以我认为这种不匹配导致了我们看到的错误。我们暂时将这些字段更改为字符串类型,现在上面的代码片段可以工作了。当然,理想情况下我们不想在不必要的时候发送字符串。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!