IsReference property in data contract

后端 未结 2 1738
一向
一向 2020-12-05 17:11

What is the purpose of IsReference property in DataContract? How does the request and response vary with this property applied?

相关标签:
2条回答
  • 2020-12-05 17:47

    It determines how objects are serialized, by default, IsReference=false.

    Setting IsReference = true allows the serialization of trees of objects that can reference each other. So with a list of Employees that each have a property for Manager (who is also an Employee), a reference to the Manager for each Employee can be held rather than embedding the Manager within each Employee node:

    IsReference=false would produce:

    <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> 
    

    Where as IsReference=true would produce:

    <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> 
    

    Snippets taken from this weblog that has a full explanation along with examples of the generated XML with the property applied.

    MSDN - IsReference Property provides details as well as Interoperable Object References.

    0 讨论(0)
  • 2020-12-05 17:53

    Also IsReference does not exist in .NET Framework 3.5. So you could get errors when using it with that Framework version - it only exists in 4.5, 4, 3.5 SP1 and Silverlight.

    "Error 297 'System.Runtime.Serialization.DataContractAttribute' does not contain a definition for 'IsReference' "

    0 讨论(0)
提交回复
热议问题