IsReference property in data contract
Emily Wong
What is the purpose of IsReference property in DataContract? How does the request and response vary with this property applied?
2 Answers
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=“ <Manager i:nil=“true“ /> <Name>Kenny</Name>
</Employee>
<Employee z:Id=“i2“ xmlns:z=“ <Manager z:Ref=“i1“ /> <Name>Bob</Name>
</Employee>
<Employee z:Id=“i3“ xmlns:z=“ <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.
0Also 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' "