我正在从DataContractSerializer迁移,转而支持ProtoBuf。我们之前注意到的一件事是,使用DataContract的IsReference =true
和XML序列化程序会产生巨大的影响。
我想知道是否有一些关于我们使用AsReferenceDefault = true
的{{1}}会发生什么的参考。
对序列化/反序列化的速度有什么影响?对序列化的影响有哪些?
附带问题:对一个对象的所有引用是否必须具有IsReference = true,或者我是否必须具有主要对象(真正拥有该对象的那个,我期望将该对象序列化的位置) IsReference = false并且仍然只有一个相同对象的实例?
答案 0 :(得分:1)
此标志更改了许多内容:
NetObjectProxy
来自{ {3}},对于好奇的 - 使用字段1
(现有对象),或字段2
和10
(新对象)设置);每次引用也会占用一点空间(但比重复序列化对象的空间要小)至于如何在实际中加起来:它将取决于场景,我喜欢听你的发现。
您需要AsReference
的地方:如果没有通过AsReferenceDefault
指定,则需要在所有希望参考跟踪发生的成员上指定 >。检查在单个成员级别应用,基本上是表单(虽然这不是实际代码):
bool asRef = member.AsReferenceSpecified()
? member.AsReference : metaType.AsReferenceDefault;