使用ProtReBuf进行反序列化时的多个对象引用,即使使用AsReferenceDefault

时间:2017-07-21 14:45:39

标签: c# .net protocol-buffers protobuf-net

我们正在迁移到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的真正含义是什么?

非常感谢

0 个答案:

没有答案