Подтвердить что ты не робот

Свойство IsReference в контракте данных

Какова цель свойства IsReference в DataContract? Как запрос и ответ меняются при использовании этого свойства?

4b9b3361

Ответ 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'"