Delen via


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 trueop, 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.

Zie ook