IsReference property in data contract

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

0

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.

0

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like