数据契约中的IsReference属性

web*_*nia 49 wcf datacontract

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

Tan*_*ner 63

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

设置IsReference = true允许序列化可以相互引用的对象树.因此,Employees对于每个都具有Manager(也是一个Employee)属性的列表,可以保持对Managerfor 的引用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> 
Run Code Online (Sandbox Code Playgroud)

凡为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> 
Run Code Online (Sandbox Code Playgroud)

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

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

  • +1为webblog链接。这很有帮助。 (2认同)