Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到我刚刚用protobuf net反序列化的消息? 我很高兴在一些C++应用程序中使用了原Buff+ZeNOMQ。我需要写一个C#应用程序。我已经让Protobuf网络工作,我相信我终于找到了如何从ZeroMQ消息反序列化的方法,但我一辈子都无法找到如何查看反序列化数据中的消息。 在我的C++应用程序中,我会反序列化为一个类,我可以简单地做一个: if(msg.has_msgTypeX()) blah_C#_Protobuf Net - Fatal编程技术网

如何找到我刚刚用protobuf net反序列化的消息? 我很高兴在一些C++应用程序中使用了原Buff+ZeNOMQ。我需要写一个C#应用程序。我已经让Protobuf网络工作,我相信我终于找到了如何从ZeroMQ消息反序列化的方法,但我一辈子都无法找到如何查看反序列化数据中的消息。 在我的C++应用程序中,我会反序列化为一个类,我可以简单地做一个: if(msg.has_msgTypeX()) blah

如何找到我刚刚用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; }

我不知道如何在Protobuf网络中实现这一点

示例.proto文件:

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。