Sdílet prostřednictvím


Interoperabilní odkazy na objekty

Ve výchozím nastavení DataContractSerializer serializuje objekty podle hodnoty. IsReference vlastnost lze použít k tomu, aby se serializátor kontraktu dat instruoval k zachování odkazů na objekty při serializaci objektů.

Vygenerovaný XML

Jako příklad vezměte v úvahu následující objekt:

[DataContract]  
public class X  
{  
    SomeClass someInstance = new SomeClass();  
    [DataMember]  
    public SomeClass A = someInstance;  
    [DataMember]  
    public SomeClass B = someInstance;  
}  
  
public class SomeClass
{  
}  

Při PreserveObjectReferences nastavení na false (výchozí) se vygeneruje následující XML:

<X>  
   <A>contents of someInstance</A>  
   <B>contents of someInstance</B>  
</X>  

S PreserveObjectReferences nastaveným na true se vygeneruje následující XML:

<X>  
   <A id="1">contents of someInstance</A>  
   <B ref="1"></B>  
</X>  

XsdDataContractExporter Přesto nepopisuje id a ref atributy ve svém schématu, i když je vlastnost preserveObjectReferences nastavena na true.

Použití IsReference

Chcete-li vygenerovat referenční informace objektu, které jsou platné podle schématu, které jej popisují, použijte DataContractAttribute atribut na typ a nastavte IsReference příznak na true. Následující příklad upraví třídu X v předchozím příkladu přidáním IsReference:

[DataContract(IsReference=true)]
public class X
{  
     SomeClass someInstance = new SomeClass();
     [DataMember]
     public SomeClass A = someInstance;
     [DataMember]
     public SomeClass B = someInstance;
}
  
public class SomeClass
{
}  

Vygenerovaný kód XML je následující:

<X>  
    <A id="1">
        <Value>contents of A</Value>  
    </A>
    <B ref="1"></B>  
</X>

Použití IsReference zajišťuje soulad s předpisy při okružní cestě zprávy. Bez toho, když je typ generován ze schématu, výstup XML pro tento typ není nutně kompatibilní s původně předpokládaným schématem. Jinými slovy, i když byly atributy id a ref serializovány, původní schéma mohlo zakázat, aby se tyto atributy (nebo všechny atributy) v XML objevily. S použitím IsReference u datového členu bude člen při přenášení tam a zpět dál rozpoznán jako odkazovatelný.

Viz také