【问题标题】:IsReference property in data contract数据合约中的 IsReference 属性
【发布时间】:2009-06-24 08:57:28
【问题描述】:

DataContract 中的IsReference 属性的用途是什么?应用此属性后,请求和响应有何不同?

【问题讨论】:

    标签: wcf datacontract


    【解决方案1】:

    它决定了对象的序列化方式,默认为IsReference=false

    设置IsReference = true 允许序列化可以相互引用的对象树。因此,对于每个具有Manager 属性的Employees 列表(也是Employee),可以保留对每个EmployeeManager 的引用,而不是将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> 
    

    摘自此weblog 的片段,其中包含完整说明以及应用属性的生成 XML 示例。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 2023-03-03
        • 1970-01-01
        • 2023-03-14
        • 2013-06-12
        • 1970-01-01
        • 2021-05-05
        • 1970-01-01
        相关资源
        最近更新 更多