显示协议缓冲区消息中的所有元素

时间:2011-06-16 13:24:34

标签: c# reflection protocol-buffers

如何在协议缓冲区消息中显示所有元素? 我是否需要使用反射或将消息转换为XML消息然后显示它? 理想情况下,一些适用于任何消息的通用代码。 拉斯

1 个答案:

答案 0 :(得分:1)

protobuf消息内部不明确,除非您有.proto模式(或者推断模式)可用,因为(例如)“string”wire-type可以表示:

  • 一个utf-8字符串
  • 一个BLOB
  • 子信息
  • 一个打包的数组

所有线型都存在类似的模糊性(除了“组”之外)。

我的建议是通过现有的反序列化过程(针对您可能在项目中提供的类型模型)运行它,以获得适合检查的对象模型。从对象模型中,您可以使用所有常用选项 - 通过XmlSerializer / JavaScriptSerializer进行反射,序列化等。

如果你拥有的只是原始数据,那么有一个可能有用的wireshark插件,或者protobuf-net存在一个可能对解析这样一个流有用的ProtoReader类;但这里强调的是,流是孤立地解密的难点。