数据 Contract 中的IsReference属性

loading...


45

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

2回答

  • 2

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

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


  • 59

    它确定了对象的序列化方式,默认情况下为 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 .

评论

loading...

暂时没有评论!