Sdílet prostřednictvím


Interoperabilní odkazy na objekty

Ve výchozím nastavení DataContractSerializer serializuje objekty podle hodnoty. Vlastnost lze použít IsReference k pokyn serializátoru kontraktu dat, aby při serializaci objektů zachoval odkazy na objekty.

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>  

Při PreserveObjectReferences nastavení se truevygeneruje následující KÓD XML:

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

XsdDataContractExporter Ale nepopisuje id atributy ref v jeho schématu, i když preserveObjectReferences je vlastnost 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 dodržování předpisů při odezvě zpráv. 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 id atributy ref serializovány, původní schéma mohlo znamenat, že tyto atributy (nebo všechny atributy) nebyly v xml. S IsReference použitím u datového členu bude člen při zaokrouhlení dál rozpoznán jako odkazovatelný .

Viz také