数据 Contract 中的IsReference属性

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

回答(2)

2 years ago

.NET Framework 3.5中也不存在 IsReference . 因此,在使用该框架版本时可能会出现错误 - 它只存在于4.5,4,3.5 SP1和Silverlight中 .

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

2 years ago

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

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

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>

weblog获取的片段,其中包含完整说明以及应用了属性的生成XML的示例 .

MSDN - IsReference Property提供详细信息以及Interoperable Object References .