Какова цель свойства 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'"