Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

IExtensibleDataObject-Schnittstelle

 

Veröffentlicht: Oktober 2016

Stellt eine Datenstruktur zur Speicherung zusätzlicher Daten zur Verfügung, die vom XmlObjectSerializer bei der Deserialisierung eines Typs angetroffen wurden, der mit dem DataContractAttribute-Attribut gekennzeichnet ist.

Namespace:   System.Runtime.Serialization
Assembly:  System.Runtime.Serialization (in System.Runtime.Serialization.dll)

public interface IExtensibleDataObject

NameBeschreibung
System_CAPS_pubpropertyExtensionData

Ruft die Struktur ab, die zusätzliche Daten enthält, oder legt diese fest.

Die IExtensibleDataObject-Schnittstelle stellt eine einzelne Eigenschaft zur Verfügung, die eine Struktur zur Speicherung von Daten außerhalb eines Datenvertrags festlegt oder zurückgibt. Die zusätzlichen Daten werden in einer Instanz der ExtensionDataObject-Klasse gespeichert, der Zugriff erfolgt über die ExtensionData-Eigenschaft. Bei einer Roundtrip-Operation, bei der Daten empfangen, verarbeitet und zugesendet werden, werden die zusätzlichen Daten unverändert an den ursprünglichen Absender zurückgesendet. Dies ist nützlich, um aus zukünftigen Versionen des Vertrags empfangene Daten zu speichern. Wenn Sie die Schnittstelle nicht implementieren, werden alle zusätzlichen Daten bei einer Roundtrip-Operation ignoriert und verworfen.

So verwenden Sie das Versionsverwaltungsfeature

  1. Implementieren Sie die IExtensibleDataObject-Schnittstelle in einer Klasse.

  2. Fügen Sie Ihrem Typ die ExtensionData-Eigenschaft hinzu.

  3. Fügen Sie einen privaten Member des Typs ExtensionDataObject zur Klasse hinzu.

  4. Mit dem neuen privaten Member können Sie Methoden für die Eigenschaft implementieren, aufrufen und festlegen.

  5. Fügen Sie das DataContractAttribute-Attribut der Klasse hinzu. Legen Sie die Name-Eigenschaft und die Namespace-Eigenschaft ggf. auf die entsprechenden Werte fest.

Weitere Informationen über die Versionsverwaltung von Typen finden Sie unter Datenvertragsversionsverwaltung. Informationen über das Erstellen von vorwärts-kompatiblen Datenverträgen finden Sie unter Aufwärtskompatible Datenverträge. Weitere Informationen zu Datenverträgen finden Sie unter Verwenden von Datenverträgen.

Der folgende Code zeigt eine Instanz eines Typs (PersonVersion2), die die zweite Version eines serialisierbaren Typs (Person) ist. Die zweite Version enthält zusätzliche Daten (ID-Feld), die in der ersten Version nicht vorhanden sind.

// Implement the IExtensibleDataObject interface 
// to store the extra data for future versions.
[DataContract(
    Name = "Person",
    Namespace = "http://www.cohowinery.com/employees")]
class Person : IExtensibleDataObject
{
    // To implement the IExtensibleDataObject interface,
    // you must implement the ExtensionData property. The property
    // holds data from future versions of the class for backward
    // compatibility.
    private ExtensionDataObject extensionDataObject_value;
    public ExtensionDataObject ExtensionData
    {
        get
        {
            return extensionDataObject_value;
        }
        set
        {
            extensionDataObject_value = value;
        }
    }
    [DataMember]
    public string Name;
}

// The second version of the class adds a new field. The field's 
// data is stored in the ExtensionDataObject field of
// the first version (Person). You must also set the Name property 
// of the DataContractAttribute to match the first version. 
// If necessary, also set the Namespace property so that the 
// name of the contracts is the same.
[DataContract(Name = "Person",
    Namespace = "http://www.cohowinery.com/employees")]
class PersonVersion2 : IExtensibleDataObject
{
    // Best practice: add an Order number to new members.
    [DataMember(Order=2)]
    public int ID;

    [DataMember]
    public string Name;

    private ExtensionDataObject extensionDataObject_value;
    public ExtensionDataObject ExtensionData
    {
        get
        {
            return extensionDataObject_value;
        }
        set
        {
            extensionDataObject_value = value;
        }
    }
}

.NET Framework
Verfügbar seit 3.0
Zurück zum Anfang
Anzeigen: