51

IsReference财产的目的是什么DataContract?请求和响应如何随此属性的应用而变化?

4

2 回答 2

65

它确定对象的序列化方式,默认情况下,IsReference=false.

设置IsReference = true允许序列化可以相互引用的对象树。因此,Employees对于每个都有一个属性的列表Manager(谁也是一个),可以保留对for eachEmployee的引用,而不是在每个节点中嵌入 :ManagerEmployeeManagerEmployee

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/“&gt; 
      <Manager i:nil=“true“ />  
      <Name>Kenny</Name> 
</Employee> 
<Employee z:Id=“i2“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“&gt; 
      <Manager z:Ref=“i1“ />  
      <Name>Bob</Name> 
</Employee> 
<Employee z:Id=“i3“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“&gt; 
      <Manager z:Ref=“i1“ />  
      <Name>Alice</Name> 
</Employee> 

摘自此博客的片段,其中包含完整的解释以及应用了属性的生成 XML 的示例。

MSDN- IsReference 属性提供详细信息以及可互操作的对象引用

于 2009-06-24T12:05:34.097 回答
3

.NET IsReferenceFramework 3.5 中也不存在。因此,在将它与该框架版本一起使用时可能会出现错误 - 它仅存在于 4.5、4、3.5 SP1 和 Silverlight 中。

“错误 297 'System.Runtime.Serialization.DataContractAttribute' 不包含 'IsReference' 的定义”

于 2010-04-22T10:21:22.137 回答