什么是目的IsReference
财产DataContract
? 如何请求和响应变化与应用这个属性?
Answer 1:
它决定了对象的序列化,在默认情况下, IsReference=false
。
设置IsReference = true
允许的,可以相互引用对象树的序列化。 因此,与列表Employees
,每个都有一个属性Manager
(谁也是Employee
),在参考Manager
对每个Employee
可以持有,而不是嵌入Manager
每个内Employee
节点:
IsReference=false
将产生:
<Employee>
<Manager i:nil=“true“ />
<Name>Kenny</Name>
</Employee>
<Employee>
<Manager>
<Manager i:nil=“true“ />
<Name>Kenny</Name>
</Manager>
<Name>Bob</Name>
</Employee>
<Employee>
<Manager>
<Manager i:nil=“true“ />
<Name>Kenny</Name>
</Manager>
<Name>Alice</Name>
</Employee>
凡为IsReference=true
将产生:
<Employee z:Id=“i1“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“>
<Manager i:nil=“true“ />
<Name>Kenny</Name>
</Employee>
<Employee z:Id=“i2“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“>
<Manager z:Ref=“i1“ />
<Name>Bob</Name>
</Employee>
<Employee z:Id=“i3“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“>
<Manager z:Ref=“i1“ />
<Name>Alice</Name>
</Employee>
从该采取片段博客具有与所施加的属性生成的XML实例沿着完整说明。
MSDN - IsReference地产提供的细节以及可互操作的对象引用 。
Answer 2:
此外IsReference
不会在.NET Framework 3.5的存在。 所以,你可以与Framework版本使用时出现错误 - 只在4.5,4,3.5 SP1和Silverlight存在。
“错误297‘System.Runtime.Serialization.DataContractAttribute’不包含‘IsReference’的定义。”
文章来源: IsReference property in data contract