IExtensibleDataObject Интерфейс

Определение

Предоставляет структуру данных для хранения дополнительных данных, обнаруженных XmlObjectSerializer при десериализации типа, отмеченного атрибутом DataContractAttribute.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
Производный

Примеры

В следующем коде показан экземпляр типа (PersonVersion2), который является второй версией сериализуемого типа (Person).The following code shows an instance of a type (PersonVersion2) that is the second version of a serializable type (Person). Вторая версия содержит дополнительные данные (поле ID), которых нет в первой версии.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 

Комментарии

Интерфейс IExtensibleDataObject предоставляет одно свойство, задающее или возвращающее структуру, используемую для хранения данных, внешних по отношению к контракту данных.The IExtensibleDataObject interface provides a single property that sets or returns a structure used to store data that is external to a data contract. Дополнительные данные хранятся в экземпляре класса ExtensionDataObject; доступ к которым осуществляется через свойство ExtensionData.The extra data is stored in an instance of the ExtensionDataObject class and accessed through the ExtensionData property. В операции обмена "туда и обратно", при которой данные получаются, обрабатываются и отправляются назад, дополнительные данные отправляются исходному отправителю без изменений.In a roundtrip operation where data is received, processed, and sent back, the extra data is sent back to the original sender intact. Полезно хранить данные, полученные из будущих версий контракта.This is useful to store data received from future versions of the contract. Если не реализовать интерфейс, любые дополнительные данные не учитываются и удаляются во время операции обмена "туда и обратно".If you do not implement the interface, any extra data is ignored and discarded during a roundtrip operation.

Чтобы использовать возможность управления версиямиTo use this versioning feature

  1. Реализуйте интерфейс IExtensibleDataObject в классе.Implement the IExtensibleDataObject interface in a class.

  2. Добавьте свойство ExtensionData в тип.Add the ExtensionData property to your type.

  3. Добавьте закрытый элемент типа ExtensionDataObject в класс.Add a private member of type ExtensionDataObject to the class.

  4. Реализуйте методы "get" и "set" для свойства с помощью нового закрытого элемента.Implement get and set methods for the property using the new private member.

  5. Примените атрибут DataContractAttribute к классу.Apply the DataContractAttribute attribute to the class. При необходимости задайте нужные значения свойствам Name и Namespace.Set the Name and Namespace properties to appropriate values if necessary.

Дополнительные сведения об управлении версиями типов см. в разделе Управление версиями контрактов данных.For more information about versioning of types, see Data Contract Versioning. Сведения о создании контрактов данных с прямыми совместимостью см. в разделе контракты данных с прямыми совместимостью.For information about creating forward-compatible data contracts, see Forward-Compatible Data Contracts. Дополнительные сведения о контрактах данных см. в разделе Использование контрактов данных.For more information about data contracts, see Using Data Contracts.

Свойства

ExtensionData

Возвращает или задает структуру, которая содержит дополнительные данные.Gets or sets the structure that contains extra data.

Применяется к

См. также раздел