其他分享
首页 > 其他分享> > CodeGo.net>如何找到我刚刚用protobuf-net反序列化的消息?

CodeGo.net>如何找到我刚刚用protobuf-net反序列化的消息?

作者:互联网

一段时间以来,我一直很高兴在某些C应用程序之间使用protobuf ZeroMQ.我需要编写一个C#应用程序.我已经使Protobuf-NET正常工作,并且我相信我终于可以解决如何从ZeroMQ消息中反序列化了,但是我一生无法解决如何查看反序列化数据中的消息.
在我的C应用程序中,我将反序列化为一个类,并且能够执行以下操作:

if(msg.has_msgTypeX())
    blah

我不知道如何在Protobuf-NET中执行此操作.

样本.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));

从这里到哪里?如何确定消息中是否包含图块,块或地图消息?

解决方法:

怎么样:

if(msg.map != null) {
    // ...
}

if(msg.block != null) {
    // ...
}

if(msg.tile != null) {
    // ...
}

?实际上,如果这些选项互斥,则也可以通过继承在Protobuf-net中对该场景进行建模(对于相同的布局),但是,由于.proto没有语法,因此您必须手动处理该语法.

标签:protobuf-net,c
来源: https://codeday.me/bug/20191127/2076487.html