使用Protobuf-net,它是否允许反序列化重用现有实例(如果它们相同)?

Sté*_*écy 3 serialization protobuf-net

我正在使用Protobuf-net.假设我有一个序列化的Gizmo对象列表,并且每个Gizmo对象都引用一个Gazoo对象.Gazoo对象可能是几个Gizmo对象引用的同一个对象.

在这种情况下,反序列化将如何工作?

我会在Gizmo对象中为同一个引用的Gazoos获得多个Gazoos副本吗?

我所期望的是Gazoo的一个副本,用于序列化数据中的所有重复项.

Mar*_*ell 6

由谷歌定义的有线格式是序列化器,而不是图形序列化器,因此保留对象引用.但是,一旦我发布"v2",我就有一些邪恶的计划将对象引用/图形支持破解到模型中 - 主要是(在该模式下)包括额外的对象id数据.这使得在互操作场景中使用有点棘手,但是 - 理想情况下只对protobuf-net <===> protobuf-net有用.

但今天没什么 - 你会得到多份副本,或者如果你得到一个循环引用,它应该爆炸.


作为更新:现在可以在protobuf-net v2中使用,但作为代码规范之外的特定实现的功能.

  • @Rover你需要在[ProtoMember]中用`AsReference = true`标记属性,或者(如果你不想使用属性)你可以通过RuntimeTypeModel来做.您还可以通过[ProtoContract]或通过RuntimeTypeModel将此指定为给定类型的所有属性的默认值. (3认同)