是否可以在不了解对象类型的情况下从protobuf-net反序列化? (这是必需的,因为我希望将protobuf-net与ScaleOut软件一起使用,该软件最终将存储不同类型的对象,因此在提供序列化方法的回调时,对象类型是未知的。)
答案 0 :(得分:0)
这取决于一些因素。首先,我们需要在三种不同的情况之间保持清晰:
Foo
-可以简单地使用通用API Type
在运行时会以某种方式已知-可以使用非通用API 我假设您是说第三个选项。这是最成问题的,因为protobuf不包含类型元数据-实际上,相同的数据可以反序列化为任何 compatible 类型:它不必是相同类型。
如果是最后一种情况,并且数据已经被序列化,那么除了纯“可扩展”类型(Extensible
基本类型可提供对未知字段的运行时访问,以及-trip支持)。但是,它无法实现为特定的对象类型,因为它不知道使用哪种类型。
Protobuf-net确实添加了“动态类型”功能,可在某种程度上弥补这一点,但这仅适用于新数据-它需要特定的配置。老实说,我倾向于建议不要这样做-它很复杂,而不是“标准protobuf”。