如何找到我刚刚用protobuf net反序列化的消息? 我很高兴在一些C++应用程序中使用了原Buff+ZeNOMQ。我需要写一个C#应用程序。我已经让Protobuf网络工作,我相信我终于找到了如何从ZeroMQ消息反序列化的方法,但我一辈子都无法找到如何查看反序列化数据中的消息。 在我的C++应用程序中,我会反序列化为一个类,我可以简单地做一个: if(msg.has_msgTypeX()) blah
我不知道如何在Protobuf网络中实现这一点 示例.proto文件:如何找到我刚刚用protobuf net反序列化的消息? 我很高兴在一些C++应用程序中使用了原Buff+ZeNOMQ。我需要写一个C#应用程序。我已经让Protobuf网络工作,我相信我终于找到了如何从ZeroMQ消息反序列化的方法,但我一辈子都无法找到如何查看反序列化数据中的消息。 在我的C++应用程序中,我会反序列化为一个类,我可以简单地做一个: if(msg.has_msgTypeX()) blah,c#,protobuf-net,C#,Protobuf Net,我不知道如何在Protobuf网络中实现这一点 示例.proto文件: package Messaging; message Message { optional string uuid = 1; optional Map map = 2; optional Block block = 3; optional Tile tile = 4; }
package Messaging;
message Message {
optional string uuid = 1;
optional Map map = 2;
optional Block block = 3;
optional Tile tile = 4;
}
message Map {
repeated Block block = 1;
}
message Block {
repeated Tile tile = 1;
required int32 zCoord = 2;
required int32 version = 3;
}
message Tile {
required int32 xGCoord = 1;
required int32 yGCoord = 2;
required int32 zGCoord = 3;
}
使用此函数反序列化:
Messaging.Message msg = ProtoBuf.Serializer.Deserialize<Messaging.Message>(new MemoryStream(zmqMsg.Body));
Messaging.Message msg=ProtoBuf.Serializer.Deserialize(newmemoryStream(zmqMsg.Body));
从这里到哪里?如何确定消息包含的是平铺消息、块消息还是映射消息?如何:
if(msg.map != null) {
// ...
}
if(msg.block != null) {
// ...
}
if(msg.tile != null) {
// ...
}
??实际上,如果这些选项是互斥的,也可以通过继承在protobuf net中对该场景进行建模(对于相同的布局)-但是,因为.proto没有语法,您必须手动处理该语法。我得到了一个意外的符号错误!。你能解释一下实现相同布局的继承过程吗?昨晚我花了很多时间阅读了这篇文章,但无法理解Protobuf NET是如何工作的,因为我是C#(我来自C++)的新手;我的“手机”一定吃了
=
。。。修复好了,谢谢。问题得到了回答。这是使用protobuf NET的正确方法吗?@S.Richmond这是一种非常有效的使用protobuf NET的方法,特别是如果您从预先存在的.proto定义开始;protobuf net不要求您使用这样的代码,但是您也可以先从代码开始,即只需要使用DTO类,而不需要.proto。