Protobuf数据序列化器

时间:2012-01-21 14:18:45

标签: .net protocol-buffers protobuf-net

此数据编译器非常适合性能。但我一直卡在数据类型为System.Object的datacolumns上,导致序列化程序抛出异常:无法序列化'System.Object'类型的数据列。

周围有什么办法吗?

2 个答案:

答案 0 :(得分:1)

protobuf格式旨在适应接收器可预测数据的情况,并且不适合“对象”场景,但是,根据数据布局,可能会有一些事情:

  • 如果“对象”数据是某种嵌套消息,那么您可以将该成员标记为“DynamicType = true”,作为ProtoMemberAttribute修饰的一部分;然后,这包括一些元数据,但作为protobuf-net特定扩展。它不会在系统之间非常便携
  • 如果“对象”数据实际上是少数已知类型之一,通常是int / DateTime / float等,那么有一些方法可以用继承来表示(非泛型基类型,多个特定的T子类型) 。同样,这在平台之间不会非常便携

我可以说明我是否更了解这个模型。

答案 1 :(得分:0)

来自the protobuf-net getting started page

  

与XmlSerializer不同,成员名称不在数据中编码 -   相反,您必须选择一个整数来标识每个成员。

换句话说,您需要通过在每个类上定义如何序列化和反序列化来帮助序列化程序。如果确实需要能够基于System.Object自动序列化所有类,则protobuf不适合您。