IExtensibleDataObject インターフェイス

定義

XmlObjectSerializerDataContractAttribute 属性でマークされた型の逆シリアル化中に検出した追加データを格納するためのデータ構造体を提供します。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) の第 2 のバージョンである型 (Person) のインスタンスを示しています。The following code shows an instance of a type (PersonVersion2) that is the second version of a serializable type (Person). 第 2 のバージョンは、第 1 のバージョンにない追加データ (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.

適用対象

こちらもご覧ください