【问题标题】:Deserializing protobuf in c#在 C# 中反序列化 protobuf
【发布时间】:2015-07-09 08:41:58
【问题描述】:

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

我正在寻找将 protobuf 转换为 json 或 xml 的方法,但没有找到 c#。

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

【问题讨论】:

标签: c# json xml protocol-buffers


【解决方案1】:

一般来说,如果您不知道消息格式,就无法使用 protobuf。为了紧凑,有线格式不包括重建消息所需的所有信息。 JSON 和 XML 在消息中包含许多额外的内容,即使您不知道它们包含什么内容,您也可以(某种程度地)使用它们,但权衡取舍是一种臃肿的格式。

顺便说一句,在您的消息成功反序列化之前,不要试图通过查看可能的消息格式列表并一个接一个地尝试来“猜测”消息是什么。完全有可能“走运”并且将一种类型的消息成功反序列化为另一种类型,但使用虚假数据。我被那个咬得很厉害。 :(

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多