使用protobuf-net反序列化消息列表

时间:2010-09-16 13:34:26

标签: c# java protobuf-net

我有一个使用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发生了变化,但如果我错在那里就更正了

1 个答案:

答案 0 :(得分:1)

开发人员昨天在某一点上使用标记0和前缀样式128,如此

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

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