【问题标题】:Unable to Deserialize in C# using protobuf-net无法使用 protobuf-net 在 C# 中反序列化
【发布时间】:2015-04-14 14:17:54
【问题描述】:

我正在使用协议缓冲区在 c++ 和 c# 客户端服务器应用程序之间发送和接收数据。为此,我正在使用 protobuf-net。 我有两个原型文件,一个请求命令和一个响应命令。我能够将命令从 c# 客户端发送和反序列化到 c++ 服务器。但我无法在 c# 中反序列化。 我在 c# 中获取字节数据,但我得到空响应命令。 考虑代码如下所示:

    proto.ResponseCommand rsp = new proto.ResponseCommand ();
    using (var data = new MemoryStream ())
    {
    data.write (buffer,0,buffer.length);
    rsp = Serializer.Deserialize<proto.ResponseCommand> (data); 
    }

我在缓冲区中以字节为单位获取数据,但它没有在响应命令中反序列化。

【问题讨论】:

  • 不知道 protobuf 反序列化的实现,但看起来你永远不会“倒带”内存流。尝试设置 data.Position = 0;否则它可能会尝试从 current 位置读取,这将不返回任何数据。
  • 好点,但我之前已经反序列化而没有改变位置。我认为问题出在反序列化过程中,因为在该命令之前一切正常。 @尼尔丹森

标签: c# c++ serialization


【解决方案1】:

我终于明白了。我没有考虑到 client.Read 命令返回的接收到的字节的实际大小。 之后我还倒带了 MemoryStream,感谢@neil danson

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2012-04-26
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多