wcf - 数据协定中的 IsReference 属性

标签 wcf datacontract

DataContractIsReference 属性的用途是什么?应用此属性后,请求和响应有何变化?

最佳答案

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

设置IsReference = true 允许对可以相互引用的对象树进行序列化。因此,有了一个 Employees 列表,每个员工都有一个 Manager 属性(他也是一个 Employee),对 Manager 的引用可以保存每个 Employee,而不是在每个 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

关于wcf - 数据协定中的 IsReference 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1037201/

相关文章:

c# - 将两个实体之间的关系保存为 N-N 关联

c# - 如何从 WCF 服务调用 Silverlight 方法

c# - WCF,找不到契约(Contract)名称 'IMetadataExchange'

.net - 与 SerializableAttribute 相比,使用 DataContractAttribute 有什么优势?

.net - 紧凑型框架 3.5 是否支持 System.Runtime.Serialization?

c# - Linq 问题不返回学生

数据协定、共享类和 DTO 的 WCF 最佳实践

c# - 为什么 WCF DataContract 不按字母顺序序列化成员?

c# - 在业务层中使用 [DataContract] 标记类是一个糟糕的设计吗?

wcf - 尝试调用 WCF webservice 4.0 时获取返回类型无效错误