【发布时间】:2012-08-28 13:16:53
【问题描述】:
一段时间以来,我一直很高兴地在我的一些 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));
从这里到哪里?如何判断消息是否包含 Tile、Block 或 Map 消息?
【问题讨论】:
标签: c# protobuf-net