web-dev-qa-db-ja.com

データコントラクトのIsReferenceプロパティ

IsReferenceDataContractプロパティの目的は何ですか?このプロパティを適用すると、要求と応答はどのように異なりますか?

48
web dunia

オブジェクトのシリアル化方法を決定します。デフォルトでは、IsReference=false

設定IsReference = trueは、相互に参照できるオブジェクトのツリーのシリアル化を許可します。したがって、Employeesのリストを持つManagerEmployeeでもある)のリストを使用すると、各ManagerEmployeeへの参照を、各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> 

これから抜粋したスニペット weblog これには、プロパティが適用されて生成されたXMLの例とともに完全な説明があります。

MSDN- IsReferenceプロパティInteroperable Object References と同様に詳細を提供します。

62
Tanner

また、IsReferenceは.NET Framework 3.5には存在しません。そのため、そのフレームワークバージョンで使用するとエラーが発生する可能性があります。これは、4.5、4、3.5 SP1およびSilverlightにのみ存在します。

「エラー297 'System.Runtime.Serialization.DataContractAttribute'には 'IsReference'の定義が含まれていません」

3
Andriy Buday