在数据契约IsReference财产(IsReference property in data co

2019-06-24 01:18发布

什么是目的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