IExtensibleDataObject Interfaz

Definición

Proporciona una estructura de datos para almacenar datos adicionales detectados por durante la XmlObjectSerializer deserialización de un tipo marcado con el DataContractAttribute atributo .

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

Ejemplos

El código siguiente muestra una instancia de un tipo (PersonVersion2) que es la segunda versión de un tipo serializable (Person). La segunda versión contiene datos adicionales (ID campo) que no están presentes en la primera versión.

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

Comentarios

La IExtensibleDataObject interfaz proporciona una sola propiedad que establece o devuelve una estructura utilizada para almacenar datos externos a un contrato de datos. Los datos adicionales se almacenan en una instancia de la ExtensionDataObject clase y se accede a ellos a través de la ExtensionData propiedad . En una operación de ida y vuelta en la que se reciben, procesan y devuelven los datos adicionales, los datos adicionales se devuelven al remitente original intacto. Esto resulta útil para almacenar los datos recibidos de versiones futuras del contrato. Si no implementa la interfaz, cualquier dato adicional se ignora y elimina durante un proceso de ida y vuelta.

Para usar esta funcionalidad de control de versiones

  1. Implemente la IExtensibleDataObject interfaz en una clase .

  2. Agregue la propiedad ExtensionData a su tipo.

  3. Agregue un miembro privado de tipo ExtensionDataObject a la clase .

  4. Implemente los métodos get y set para la propiedad con el nuevo miembro privado.

  5. Aplique el DataContractAttribute atributo a la clase . Establezca las propiedades Name y Namespace en los valores adecuados si es necesario.

Para obtener más información sobre el control de versiones de tipos, vea Control de versiones del contrato de datos. Para obtener información sobre cómo crear contratos de datos compatibles con versiones posteriores, consulte Forward-Compatible Contratos de datos. Para obtener más información sobre los contratos de datos, consulte Utilización de contratos de datos.

Propiedades

Nombre Description
ExtensionData

Obtiene o establece la estructura que contiene datos adicionales.

Se aplica a

Consulte también