我正在处理一些没有 .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/