IExtensibleDataObject Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
Implemente la IExtensibleDataObject interfaz en una clase .
Agregue la propiedad ExtensionData a su tipo.
Agregue un miembro privado de tipo ExtensionDataObject a la clase .
Implemente los métodos get y set para la propiedad con el nuevo miembro privado.
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. |