c# - 使用 protobuf-net 反序列化完全未知的对象

标签 c# .net protocol-buffers protobuf-net

我正在处理一些没有 .proto 定义的 protobuf 编码数据,因此没有一个对象/类是已知的。

protoc 编译器可以使用 protoc --decode_raw 为任何给定的 protobuf 编码数据生成通用模板样式输出

我想做的本质上是使用 probuf-net 生成一个类似的通用输出模板。但是我不确定这是否可能?

所以我只想将编码数据反序列化为一个通用对象,其中包含其他通用对象。

这可能吗?

最佳答案

这里的问题是:protobuf 格式不明确;如果不知道模式,就不存在解释数据的单一/可靠的方法。完全相同的字节可以有许多不同的含义。 --decode_raw 所做的只是进行一些猜测;您可以通过 ProtoReader API 或 using this handy decoder 使用 protobuf-net 获得类似的猜测。 ,但是:您不能像使用 JSON 或 XML 那样“简单地”反序列化对象。

protobuf-net 中有 API 用于处理未知/意外字段,所以可以肯定的是:您可以创建一个一切都出乎意料的对象,但这实际上并非如此可以帮助您,因为您仍然需要实际解释每个字段,并且如果不了解架构就无法做到这一点。

最终,protobuf(二进制格式,而不是任何特定的库)不适合您想要在这里执行的操作。

关于c# - 使用 protobuf-net 反序列化完全未知的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62910949/

相关文章:

c# - 增加 Visual Studio 中的调试项计数

.net - 为什么 BinaryReader.ReadUInt32() 反转位模式?

qt - 使用 qmake 链接 .proto 文件

c# - BouncyCaSTLe 未定义长度 ASN1

c# - 从 IMAP 获取邮件时获取加密字符串

c# - TCP/IP 在不关闭连接的情况下连续接收消息

c# - 我如何 "ASCII armor"我的 MemoryStream?

c# - 从具有模式的目录中获取文件

c++ - 使用 zLib 删除无效

protocol-buffers - Protocol Buffer 对象的增量写入