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>  

Wanneer PreserveObjectReferences is ingesteld op true, 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 van IsReference zorgt voor naleving bij heen-en-weer communiceren van berichten. Zonder dit, wanneer een type wordt gegenereerd vanuit het schema, is de XML-uitvoer voor dat type niet noodzakelijkerwijs compatibel met het oorspronkelijk veronderstelde schema. Met andere woorden, hoewel de id en ref attributen zijn geserialiseerd, had het oorspronkelijke schema kunnen bepalen dat deze attributen (of alle attributen) niet in de XML mochten voorkomen. Als IsReference is toegepast op een gegevenslid, wordt het lid nog steeds herkend als referentiebaar wanneer gegevens worden teruggerond.

Zie ook