C# Protbuf net:ProtoMemberAttribute.AsReference和ProtoContract.AsReferenceDefault之间的区别是什么
C# Protbuf net:ProtoMemberAttribute.AsReference和ProtoContract.AsReferenceDefault之间的区别是什么,c#,protocol-buffers,protobuf-net,C#,Protocol Buffers,Protobuf Net,ProtoContractproperty-AsReferenceDefault和ProtoMemberAttributepropertyAsReference之间有什么区别 根据: AsReference-启用子对象的引用跟踪;这使用 一个非常不同的序列化布局,但只会序列化它 对象一次(为其提供唯一的引用标记)。这允许 对循环图的完整图形支持。这也可以使用 非常有效地存储以其他方式存储的公共字符串 在数据中重复多次 但是它与协议属性:AsReferenceDefault有什么关系呢 例如,如果
ProtoContract
property-AsReferenceDefault
和ProtoMemberAttribute
propertyAsReference
之间有什么区别
根据:
AsReference
-启用子对象的引用跟踪;这使用
一个非常不同的序列化布局,但只会序列化它
对象一次(为其提供唯一的引用标记)。这允许
对循环图的完整图形支持。这也可以使用
非常有效地存储以其他方式存储的公共字符串
在数据中重复多次
但是它与协议
属性:AsReferenceDefault
有什么关系呢
例如,如果将
AsReferenceDefault
设置为true,是否意味着不再需要ProtoMemberAttribute
属性AsReference
?是,如果将AsReferenceDefault
应用于类,即使在ProtoMemberAttribute
上相应的属性未声明AsReference
,它也将始终序列化为引用
理想情况下,对于您的大类,您可以确保对象是大的,最好将其序列化一次作为引用,这样就可以将其标记为AsReferenceDefault
AsReference
设计用于处理引用序列化,即使它不是您自己的类,例如String
Yes,如果AsReferenceDefault
应用于类,即使在ProtoMemberAttribute
上相应的属性未声明AsReference
,它也将始终序列化为引用
理想情况下,对于您的大类,您可以确保对象是大的,最好将其序列化一次作为引用,这样就可以将其标记为AsReferenceDefault
AsReference
设计用于处理引用序列化,即使它不是您自己的类,例如String
是的,我这样认为,但在我们的代码中,有许多循环引用,因此AsReferenceDefault
应该处理它,但不幸的是,它没有处理,但是在添加AsReference
之后,它就可以工作了(例如,AsReference被设置为true
,用于List
,但是MyEntity
已经有了它)。所以看起来有一些区别,我不确定是什么。如果你有一个类MyEntityList:List
,你可以将MyEntityList
标记为AsReferenceDefault
,列表将不起作用,没有在属性列表上添加AsReference=true
,我得到了一个异常(检测到递归)。目前,我遇到了StackOverflow异常
,并且根据调用堆栈协议,buf尝试序列化相同的对象(数据具有循环引用),但同时AsReferenceDefault=true
。我对AsReference
行为有点好奇,这有点出乎意料。你能尝试创建类MyEntityList
并用MyEntityList
替换List
吗?你会得到同样的异常?我已经用示例检查过了,是的,你是对的,谢谢。是的,我这样想,但在我们的代码中,有许多循环引用,因此AsReferenceDefault
应该处理它,但不幸的是,它没有处理,但在添加AsReference
后,它工作了(例如List
的AsReference设置为true
,但MyEntity
已经有了它)。所以看起来有一些区别,我不确定是什么。如果你有一个类MyEntityList:List
,你可以将MyEntityList
标记为AsReferenceDefault
,列表将不起作用,没有在属性列表上添加AsReference=true
,我得到了一个异常(检测到递归)。目前,我遇到了StackOverflow异常
,并且根据调用堆栈协议,buf尝试序列化相同的对象(数据具有循环引用),但同时AsReferenceDefault=true
。我对AsReference
行为有点好奇,这有点出乎意料。你能尝试创建类MyEntityList
并用MyEntityList
替换List
吗?你会得到同样的异常情况吗?我已经用示例进行了检查,是的,你是对的,非常感谢