Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ý.