IExtensibleDataObject Schnittstelle

Definition

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.Provides a data structure to store extra data encountered by the XmlObjectSerializer during deserialization of a type marked with the DataContractAttribute attribute.

public interface class IExtensibleDataObject
public interface IExtensibleDataObject
type IExtensibleDataObject = interface
Public Interface IExtensibleDataObject
Abgeleitet

Beispiele

Der folgende Code zeigt eine Instanz eines Typs (PersonVersion2), die die zweite Version eines serialisierbaren Typs (Person) ist.The following code shows an instance of a type (PersonVersion2) that is the second version of a serializable type (Person). Die zweite Version enthält zusätzliche Daten (ID-Feld), die in der ersten Version nicht vorhanden sind.The second version contains extra data (ID field) that is not present in the first version.

// 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;
        }
    }
}
' Implement the IExtensibleDataObject interface 
' to store the extra data for future versions.
<DataContract(Name := "Person", [Namespace] := "http://www.cohowinery.com/employees")>  _
Class Person
    Implements 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_value As ExtensionDataObject
    
    Public Property ExtensionData() As ExtensionDataObject _
       Implements IExtensibleDataObject.ExtensionData
        Get
            Return extensionDataObject_value
        End Get
        Set
            extensionDataObject_value = value
        End Set
    End Property
    <DataMember()>  _
    Public Name As String
End Class 

' 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
    Implements IExtensibleDataObject

    ' Best practice: add an Order number to new members.
    <DataMember(Order:=2)>  _
    Public ID As Integer
    
    <DataMember()>  _
    Public Name As String
    
    Private extensionDataObject_value As ExtensionDataObject
    
    Public Property ExtensionData() As ExtensionDataObject _
       Implements IExtensibleDataObject.ExtensionData
        Get
            Return extensionDataObject_value
        End Get
        Set
            extensionDataObject_value = value
        End Set
    End Property
End Class 

Hinweise

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.The IExtensibleDataObject interface provides a single property that sets or returns a structure used to store data that is external to a data contract. Die zusätzlichen Daten werden in einer Instanz der ExtensionDataObject-Klasse gespeichert, der Zugriff erfolgt über die ExtensionData-Eigenschaft.The extra data is stored in an instance of the ExtensionDataObject class and accessed through the ExtensionData property. 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.In a roundtrip operation where data is received, processed, and sent back, the extra data is sent back to the original sender intact. Dies ist nützlich, um aus zukünftigen Versionen des Vertrags empfangene Daten zu speichern.This is useful to store data received from future versions of the contract. Wenn Sie die Schnittstelle nicht implementieren, werden alle zusätzlichen Daten bei einer Roundtrip-Operation ignoriert und verworfen.If you do not implement the interface, any extra data is ignored and discarded during a roundtrip operation.

So verwenden Sie das VersionsverwaltungsfeatureTo use this versioning feature

  1. Implementieren Sie die IExtensibleDataObject-Schnittstelle in einer Klasse.Implement the IExtensibleDataObject interface in a class.

  2. Fügen Sie Ihrem Typ die ExtensionData-Eigenschaft hinzu.Add the ExtensionData property to your type.

  3. Fügen Sie einen privaten Member des Typs ExtensionDataObject zur Klasse hinzu.Add a private member of type ExtensionDataObject to the class.

  4. Mit dem neuen privaten Member können Sie Methoden für die Eigenschaft implementieren, aufrufen und festlegen.Implement get and set methods for the property using the new private member.

  5. Fügen Sie das DataContractAttribute-Attribut der Klasse hinzu.Apply the DataContractAttribute attribute to the class. Legen Sie die Name-Eigenschaft und die Namespace-Eigenschaft ggf. auf die entsprechenden Werte fest.Set the Name and Namespace properties to appropriate values if necessary.

Weitere Informationen zur Versionsverwaltung von Typen finden Sie unter Daten Vertrags VersionsVerwaltung.For more information about versioning of types, see Data Contract Versioning. Weitere Informationen zum Erstellen von Forward-kompatiblen Daten Verträgen finden Sie unter Forward-kompatible Datenverträge.For information about creating forward-compatible data contracts, see Forward-Compatible Data Contracts. Weitere Informationen zu Daten Verträgen finden Sie unter Verwenden von Daten Verträgen.For more information about data contracts, see Using Data Contracts.

Eigenschaften

ExtensionData

Ruft die Struktur ab, die zusätzliche Daten enthält, oder legt diese fest.Gets or sets the structure that contains extra data.

Gilt für:

Siehe auch