何时/为啥不应该在我的 DataContracts 上使用 IsReference=true?
Posted
技术标签:
【中文标题】何时/为啥不应该在我的 DataContracts 上使用 IsReference=true?【英文标题】:When/Why should I not use IsReference=true on my DataContracts?何时/为什么不应该在我的 DataContracts 上使用 IsReference=true? 【发布时间】:2012-02-11 04:50:07 【问题描述】:我了解什么是属性属性 IsReference 以及它在做什么。但我不明白为什么/何时应该不使用它。什么时候使用 IsReference=true 是个坏主意?
如果我的 wcf 服务是 .net 到 .net,是否有充分的理由不设置 IsReference=true?
【问题讨论】:
【参考方案1】:避免使用 IsReference 至少有两个原因:
首先存在性能损失,因为所有序列化程序都必须对每个要序列化的对象执行身份检查。
其次,DataContractJsonSerializer 无法序列化标有 IsReference 属性的对象。因此,如果您需要同时支持 Xml 和 Json,那么您将无法使用它。
除此之外,我看不出有任何理由不使用它。毕竟它确实节省了一些宝贵的带宽!
【讨论】:
虽然 JSON.Net 可以处理 IsReference=true。 dotnet.learningtree.com/2012/04/03/…【参考方案2】:我认为不应该发生任何不好的事情。如果您的图形包含多个指向同一对象实例的链接,则将此属性设置为 true 将减小 XML 大小。
http://zamd.net/2008/05/20/datacontract-serializer-and-isreference-property/
但我不确定为什么默认情况下不启用它。
【讨论】:
以上是关于何时/为啥不应该在我的 DataContracts 上使用 IsReference=true?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 .Net 4.0 构建客户端 DataContracts 会导致 .Net 4.5 应用程序中的 MethodAccessException?
为啥我们需要复制构造函数以及何时应该在 java 中使用复制构造函数