我们正在迁移到ProtoBuf序列化,我期待着使用它。
我注意到一个对象被多次反序列化,如果引用它的类使用AsReferenceDefault([ProtoContract(AsReferenceDefault = true)]),则会发生事件。
如果使用AsReference声明ProtoMember本身([ProtoMember(1,AsReference = true)]),则对象被反序列化一次。 根据我的理解,这不是必要的,因为ProtoContract是用AsReferenceDefault = true声明的,但似乎我错了。
[ProtoContract(AsReferenceDefault = true)]
public class Card
{
[ProtoMember(1, AsReference = true)]
//[ProtoMember(1)]
public ItemCollection<ProcessingBlock> ProcessingBlocks { get; set; }
}
[ProtoContract(AsReferenceDefault = true)]
public class AnotherClass
{
[ProtoMember(1, AsReference = true)]
public DynamicProcessingBlock ProcessingBlock { get; set; }
}
[ProtoContract(AsReferenceDefault = true)]
public class DynamicProcessingBlock : ProcessingBlock
{
}
在类Card中,如果我使用注释行,则在AnotherClass中引用的DynamicProcessingBlock实例将被反序列化两次。
ProtoContrat上AsReferenceDefault = true的真正含义是什么?
非常感谢