c# - 在c#中反序列化protobuf

标签 c# json xml protocol-buffers

我最近开始在我的项目中使用 protobuf,我想知道,如果我不确切知道我拥有什么实体,是否有某种方法可以反序列化原始消息?当我使用 JSON 或 XML 时,我可以轻松做到。

我正在寻找某种将 protobuf 转换为 json 或 xml 的方法,但没有找到 C# 的任何内容。

我已经查看过流行的库,但它们只能将 json 序列化为 protobuf,但不能双向序列化。 有人知道如何解决这个问题吗?我将不胜感激任何建议或解决方案!

最佳答案

通常,如果您不知道消息格式,则无法使用 protobuf。为了紧凑,有线格式不包括重建消息所需的所有信息。 JSON 和 XML 在消息中包含很多额外的内容,即使您不知道它们包含什么,也可以(某种程度上)使用它们,但代价是格式臃肿。

顺便说一句,不要尝试通过查看可能的消息格式列表并逐一尝试来“猜测”消息是什么,直到消息成功反序列化为止。完全有可能“运气好”,将一种类型的消息成功反序列化为另一种类型,但数据是虚假的。我被那只咬得相当厉害。 :(

如果您想将多种不同的消息类型包装在一条消息中,请查看联合类型:https://developers.google.com/protocol-buffers/docs/techniques#union

有一个使用 self 描述消息的解决方法(在评论中提到),但我从未发现它们有用,显然谷歌也没有: https://developers.google.com/protocol-buffers/docs/techniques#self-description

关于c# - 在c#中反序列化protobuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312379/

相关文章:

c# - 如何使用 web.config 文件强制使用 HTTPS

C# 可以从派生类调用基类属性吗

xml - XSLT:如何使用文本节点两次?一次有空格又一次没有空格?

c# - 如何用前缀替换 xmlns 命名空间属性?

c# - 如何使用 Entity Framework Code First V6.1.2 进行集成测试

c# - 数据库查询中的存储过程与代码

java - 根据JSON的一些属性获取JSON文档

c# - Json.net 重写 DefaultContractResolver 中的方法以反序列化私有(private) setter

java - Spring 启动: automatic JSON message converter for @Requestbody GET doesn't work

python - Python ElementTree 中不区分大小写的 findall