IExtensibleDataObject Rozhraní

Definice

Poskytuje datovou strukturu pro ukládání dodatečných dat zjištěných XmlObjectSerializer při deserializaci typu označeného atributem DataContractAttribute .

public interface class IExtensibleDataObject
public interface IExtensibleDataObject
type IExtensibleDataObject = interface
Public Interface IExtensibleDataObject
Odvozené

Příklady

Následující kód ukazuje instanci typu (PersonVersion2), která je druhou verzí serializovatelného typu (Person). Druhá verze obsahuje další data (ID pole), která nejsou k dispozici v první verzi.

// 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

Poznámky

Rozhraní IExtensibleDataObject poskytuje jednu vlastnost, která nastavuje nebo vrací strukturu použitou k ukládání dat, která jsou externí pro kontrakt dat. Další data jsou uložena v instanci ExtensionDataObject třídy a je k nim přistupováno prostřednictvím vlastnosti ExtensionData. V operaci zpracování, při které se data přijímají, zpracovávají a pak odesílají zpět, se dodatečná data odesílají zpět původnímu odesílateli beze změny. To je užitečné k ukládání dat přijatých z budoucích verzí kontraktu. Pokud rozhraní neimplementujete, jakákoliv další data se během operace zpětného přenosu ignorují a zahodí.

Použití této funkce správy verzí

  1. Implementujte IExtensibleDataObject rozhraní ve třídě.

  2. ExtensionData Přidejte vlastnost do svého typu.

  3. Přidejte do třídy soukromý člen typu ExtensionDataObject .

  4. Implementujte metody get a set pro vlastnost pomocí nového privátního atributu.

  5. Použijte atribut DataContractAttribute na třídu. Nastavte vlastnosti Name a Namespace na odpovídající hodnoty v případě potřeby.

Další informace o správě verzí typů najdete v tématu Správa verzí kontraktů dat. Informace o vytváření kontraktů dat kompatibilních s budoucími verzemi najdete v tématu Forward-Compatible Kontrakty dat. Další informace o kontraktech dat naleznete v tématu Použití kontraktů dat.

Vlastnosti

Name Description
ExtensionData

Získá nebo nastaví strukturu, která obsahuje další data.

Platí pro

Viz také