Свойство IsReference в контракте данных - PullRequest
48 голосов
/ 24 июня 2009

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

Ответы [ 2 ]

62 голосов
/ 24 июня 2009

Определяет, как объекты сериализуются, по умолчанию IsReference=false.

Настройка IsReference = true позволяет сериализовать деревья объектов, которые могут ссылаться друг на друга. Таким образом, со списком Employees, каждый из которых имеет свойство для Manager (который также является Employee), можно хранить ссылку на Manager для каждого Employee вместо встраивания Manager в каждый Employee узел:

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> 

Фрагменты, взятые из этого блога , в котором содержится полное объяснение, а также примеры сгенерированного XML с примененным свойством.

MSDN - Свойство IsReference предоставляет сведения, а также Ссылки на совместимые объекты .

3 голосов
/ 22 апреля 2010

Также IsReference не существует в .NET Framework 3.5. Таким образом, вы можете получить ошибки при использовании этой версии Framework - она ​​существует только в 4.5, 4, 3.5 SP1 и Silverlight.

"Ошибка 297 'System.Runtime.Serialization.DataContractAttribute' не содержит определения для IsReference" "

...