Protbuf-net:ProtoMemberAttribute.AsReference和ProtoContract.AsReferenceDefault之间的差异是什么?

时间:2017-08-09 16:36:55

标签: c# protocol-buffers protobuf-net

ProtoContract属性 - AsReferenceDefaultProtoMemberAttribute属性AsReference之间有什么区别。

根据wiki

  

AsReference - 启用子对象的引用跟踪;这用了   一个非常不同的序列化布局,但只会序列化   对象一次(给它一个唯一的引用令牌)。这允许   对其他循环图的全图支持。这也可以使用   效果很好,有效地存储其他常见的字符串   在数据中多次重复

但它与ProtoContract属性的关系如何:AsReferenceDefault

例如,如果将AsReferenceDefault设置为true,是否意味着不再需要ProtoMemberAttribute属性AsReference

1 个答案:

答案 0 :(得分:2)

是的,如果AsReferenceDefault应用于类,即使相应的属性未在AsReference上声明ProtoMemberAttribute,它也会始终序列化为参考。

理想情况下,对于您的大班级,您确定该对象很大,最好将其序列化一次作为参考,因此您可以将其标记为AsReferenceDefault

AsReference旨在处理引用序列化,即使它不是您自己的类,例如String