我最近开始在我的项目中使用 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/