Interoperabele objectverwijzingen
DataContractSerializer Standaard serialiseert u objecten op waarde. U kunt de IsReference eigenschap gebruiken om de serialisatiefunctie van het gegevenscontract te instrueren om objectverwijzingen te behouden bij het serialiseren van objecten.
Gegenereerde XML
Bekijk bijvoorbeeld het volgende object:
[DataContract]
public class X
{
SomeClass someInstance = new SomeClass();
[DataMember]
public SomeClass A = someInstance;
[DataMember]
public SomeClass B = someInstance;
}
public class SomeClass
{
}
Als PreserveObjectReferences deze is ingesteld op false
(de standaardinstelling), wordt de volgende XML gegenereerd:
<X>
<A>contents of someInstance</A>
<B>contents of someInstance</B>
</X>
Als PreserveObjectReferences deze is ingesteld true
op, wordt de volgende XML gegenereerd:
<X>
<A id="1">contents of someInstance</A>
<B ref="1"></B>
</X>
XsdDataContractExporter Beschrijft echter niet de id
en ref
kenmerken in het schema, zelfs niet wanneer de preserveObjectReferences
eigenschap is ingesteld op true
.
IsReference gebruiken
Als u objectverwijzingsgegevens wilt genereren die geldig zijn volgens het schema waarin het wordt beschreven, past u het DataContractAttribute kenmerk toe op een type en stelt u de IsReference vlag in op true
. In het volgende voorbeeld wordt de klasse X
in het vorige voorbeeld gewijzigd door het volgende toe te voegen IsReference
:
[DataContract(IsReference=true)]
public class X
{
SomeClass someInstance = new SomeClass();
[DataMember]
public SomeClass A = someInstance;
[DataMember]
public SomeClass B = someInstance;
}
public class SomeClass
{
}
De gegenereerde XML is als volgt:
<X>
<A id="1">
<Value>contents of A</Value>
</A>
<B ref="1"></B>
</X>
Het gebruik IsReference
zorgt voor naleving van het retourneert berichten. Als er geen type wordt gegenereerd op basis van het schema, is de XML-uitvoer voor dat type niet noodzakelijkerwijs compatibel met het oorspronkelijke schema. Met andere woorden, hoewel de id
en ref
kenmerken zijn geserialiseerd, kan het oorspronkelijke schema deze kenmerken (of alle kenmerken) in de XML hebben voorkomen. Als IsReference
dit is toegepast op een gegevenslid, wordt het lid nog steeds herkend als referentiebaar wanneer er een retour wordt verzonden.