Какова цель свойства IsReference в DataContract? Как запрос и ответ меняются при использовании этого свойства?
Свойство IsReference в контракте данных
Ответ 1
Определяет, как объекты сериализуются по умолчанию, IsReference=false.
Настройка IsReference = true позволяет сериализовать деревья объектов, которые могут ссылаться друг на друга. Итак, со списком Employees, у каждого из которых есть свойство для Manager (кто также является Employee), ссылка на Manager для каждого Employee может храниться, а не встраивать Manager внутри каждый Employee node:
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 содержит подробные сведения, а также Взаимодействующие ссылки на объекты.
Ответ 2
Также IsReference не существует в .NET Framework 3.5. Таким образом, вы можете получить ошибки при использовании этой версии Framework - она существует только в версиях 4.5, 4, 3.5 SP1 и Silverlight.
"Ошибка 297 'System.Runtime.Serialization.DataContractAttribute' не содержит определения для 'IsReference'"