IExtensibleDataObject Interface

Definitie

Biedt een gegevensstructuur voor het opslaan van extra gegevens die tijdens de XmlObjectSerializer deserialisatie van een type zijn gemarkeerd met het DataContractAttribute kenmerk.

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

Voorbeelden

De volgende code toont een exemplaar van een type (PersonVersion2) dat de tweede versie is van een serialiseerbare type (Person). De tweede versie bevat extra gegevens (ID veld) die niet aanwezig zijn in de eerste versie.

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

Opmerkingen

De IExtensibleDataObject interface biedt één eigenschap waarmee een structuur wordt ingesteld of geretourneerd die wordt gebruikt voor het opslaan van gegevens die extern zijn voor een gegevenscontract. De extra gegevens worden opgeslagen in een exemplaar van de ExtensionDataObject klasse en geopend via de ExtensionData eigenschap. In een ronde-operatie waarin gegevens worden ontvangen, verwerkt en teruggezonden, worden de extra gegevens intact naar de oorspronkelijke afzender verzonden. Dit is handig voor het opslaan van gegevens die zijn ontvangen van toekomstige versies van het contract. Als u de interface niet implementeert, worden eventuele extra gegevens genegeerd en verwijderd tijdens een retourbewerking.

Om deze versiefunctie te gebruiken

  1. Implementeer de IExtensibleDataObject interface in een klasse.

  2. Voeg de ExtensionData eigenschap toe aan uw type.

  3. Voeg een privélid van het type ExtensionDataObject toe aan de klasse.

  4. Implementeer get- en set-methoden voor de eigenschap met behulp van het nieuwe private-lid.

  5. Pas het DataContractAttribute kenmerk toe op de klasse. Stel indien nodig de Name en Namespace eigenschappen in op de juiste waarden.

Zie Versiebeheer van gegevenscontract voor meer informatie over versiebeheer van typen. Zie Forward-Compatible Data Contracts voor informatie over het maken van forward-compatibele gegevenscontracten. Zie Gegevenscontracten gebruiken voor meer informatie over gegevenscontracten.

Eigenschappen

Name Description
ExtensionData

Hiermee haalt u de structuur op die extra gegevens bevat of stelt u deze in.

Van toepassing op

Zie ook