Interoperable ObjektverweiseInteroperable Object References

Standardmäßig serialisiert der DataContractSerializer Objekte anhand des Werts.By default the DataContractSerializer serializes objects by value. Mithilfe der IsReference-Eigenschaft können Sie den Datenvertragsserialisierer anweisen, die Objektverweise beim Serialisieren von Objekten des Typs beizubehalten.You can use the IsReference property to instruct the Data Contract Serializer to preserve object references when serializing objects of the type.

Generierte XMLGenerated XML

Betrachten Sie als Beispiel das folgende Objekt:As an example, consider the following object:

[DataContract]  
public class X  
{  
    SomeClass someInstance = new SomeClass();  
    [DataMember]  
    public SomeClass A = someInstance;  
    [DataMember]  
    public SomeClass B = someInstance;  
}  

public class SomeClass   
{  
}  

Ist PreserveObjectReferences auf false festgelegt (Standardeinstellung), wird die folgende XML generiert:With PreserveObjectReferences set to false (the default), the following XML is generated:

<X>  
   <A>contents of someInstance</A>  
   <B>contents of someInstance</B>  
</X>  

Ist PreserveObjectReferences auf true festgelegt, wird die folgende XML generiert:With PreserveObjectReferences set to true, the following XML is generated:

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

XsdDataContractExporter beschreibt jedoch nicht das id- und das ref-Attribut im Schema. Dies ist auch dann der Fall, wenn die preserveObjectReferences-Eigenschaft auf true festgelegt ist.However, XsdDataContractExporter does not describe the id and ref attributes in its schema, even when the preserveObjectReferences property is set to true.

Verwenden von IsReferenceUsing IsReference

Wenden Sie zum Generieren von Objektverweisinformationen, die gemäß dem beschreibenden Schema gültig sind, das DataContractAttribute-Attribut auf einen Typ an, und legen Sie das IsReference-Flag auf true fest.To generate object reference information that is valid according to the schema that describes it, apply the DataContractAttribute attribute to a type, and set the IsReference flag to true. Verwendung von IsReference in der vorherigen X-Beispielklasse:Using IsReference in the previous example class X:

[DataContract(IsReference=true)] public class X

{

SomeClass someInstance = new SomeClass();

[DataMember]

public SomeClass A = someInstance;

[DataMember]

public SomeClass B = someInstance;

}

public class SomeClass

{

}

Folgende XML wird generiert:The generated XML is as follows:

<X>

<A id="1">

<Value>contents of A</Value>

</A>

<B ref="1">

</B>

</X>

Durch die Verwendung von IsReference wird die Kompatibilität für Nachrichten-Roundtrips gewährleistet.Using IsReference ensures compliance on message round-tripping. Wird dieses Element nicht verwendet, wird beim Erstellen eines Typs aus dem Schema nicht unbedingt eine XML für diesen Typ zurückgesendet, die mit dem ursprünglich angenommenen Schema kompatibel ist.Without it, when a type is generated from schema, what is sent back as XML for that type is not necessarily compatible with the schema originally assumed. Mit anderen Worten: Obgleich das id- und das ref-Attribut serialisiert wurden, wurde durch das ursprüngliche Schema möglicherweise verhindert, dass diese Attribute (oder alle Attribute) in der XML erscheinen.In other words, although the id and ref attributes were serialized, the original schema could have barred these attributes (or all attributes) from occurring in the XML. Wurde IsReference auf einen Datenmember angewendet, gilt der Member bei Roundtrips auch weiterhin als "verweisbar".With IsReference applied to a data member, the member continues to be recognized as "referenceable" when roundtripped.

Siehe auchSee Also

DataContractAttribute
CollectionDataContractAttribute
IsReference
IsReference