要序列化的类的类型反序列化

时间:2018-09-25 16:31:39

标签: protobuf-net

是否可以在不了解对象类型的情况下从protobuf-net反序列化? (这是必需的,因为我希望将protobuf-net与ScaleOut软件一起使用,该软件最终将存储不同类型的对象,因此在提供序列化方法的回调时,对象类型是未知的。)

1 个答案:

答案 0 :(得分:0)

这取决于一些因素。首先,我们需要在三种不同的情况之间保持清晰:

  • 类型静态称为Foo-可以简单地使用通用API
  • 类型不是静态已知的,但是Type在运行时会以某种方式已知-可以使用非通用API
  • 完全未知的类型

我假设您是说第三个选项。这是最成问题的,因为protobuf不包含类型元数据-实际上,相同的数据可以反序列化为任何 compatible 类型:它不必是相同类型。

如果是最后一种情况,并且数据已经被序列化,那么除了纯“可扩展”类型(Extensible基本类型可提供对未知字段的运行时访问,以及-trip支持)。但是,它无法实现为特定的对象类型,因为它不知道使用哪种类型。

Protobuf-net确实添加了“动态类型”功能,可在某种程度上弥补这一点,但这仅适用于新数据-它需要特定的配置。老实说,我倾向于建议不要这样做-它很复杂,而不是“标准protobuf”。