49 votes

Propriété IsReference dans le contrat de données

Quel est le but de la propriété IsReference dans le contrat de données. Comment la demande et la réponse varient-elles avec cette propriété appliquée ?

63voto

Tanner Points 6058

Il détermine comment les objets sont sérialisés, par défaut, IsReference=false .

Réglage de IsReference = true permet la sérialisation d'arbres d'objets qui peuvent se référencer les uns les autres. Ainsi, avec une liste de Employees qui ont chacune une propriété pour Manager (qui est aussi un Employee ), une référence à la Manager pour chaque Employee peut être tenue plutôt que d'intégrer la Manager au sein de chaque Employee nœud :

IsReference=false produirait :

<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> 

Où comme IsReference=true produirait :

<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> 

Extraits de ce document weblog qui contient une explication complète ainsi que des exemples du XML généré avec la propriété appliquée.

MSDN - Propriété IsReference fournit des détails ainsi que Références d'objets interopérables .

3voto

Andriy Buday Points 1221

De plus, IsReference n'existe pas dans .NET Framework 3.5. Vous risquez donc d'obtenir des erreurs en l'utilisant avec cette version du framework - il n'existe que dans 4, 3.5 SP1 et 3.0.

"Erreur 297 'System.Runtime.Serialization.DataContractAttribute' ne contient pas de définition pour 'IsReference'".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X