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
property
AsReference
之间有什么区别

根据:

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
吗?你会得到同样的异常情况吗?我已经用示例进行了检查,是的,你是对的,非常感谢