【发布时间】: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