c#中protobuf的反序列化

本文关键字:反序列化 protobuf | 更新日期: 2023-09-27 18:01:51

我最近开始在我的项目中使用protobuf,我想知道,如果我不知道我到底有什么实体,是否有一些方法可以反序列化原型消息?当我使用JSON或XML时,我可以很容易地做到这一点。

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

我已经查看了一些流行的库,但是它们只能将json序列化到protobuf,而不是在两个方向上。有人知道怎么解决这个问题吗?我将感激任何建议或解决方案!

c#中protobuf的反序列化

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

顺便说一下,不要试图"猜测"消息是什么,方法是沿着可能的消息格式列表,一个接一个地尝试,直到消息成功反序列化。完全有可能"走运"地将一种类型的消息成功反序列化为另一种类型,但使用虚假数据。我被那条蛇咬得很厉害。(

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

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