IExtensibleDataObject Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit une structure de données pour stocker des données supplémentaires rencontrées par le XmlObjectSerializer lors de la désérialisation d’un type marquée avec l’attribut DataContractAttribute.
public interface class IExtensibleDataObject
public interface IExtensibleDataObject
type IExtensibleDataObject = interface
Public Interface IExtensibleDataObject
- Dérivé
Exemples
Le code suivant illustre une instance d'un type (PersonVersion2
) qui est la deuxième version d'un type sérialisable (Person
). La deuxième version contient des données supplémentaires (champ ID
) qui ne sont pas présentes dans la première 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
Remarques
L'interface IExtensibleDataObject fournit une propriété unique qui définit ou retourne une structure utilisée pour stocker des données qui sont externes à un contrat de données. Les données supplémentaires sont stockées dans une instance de la classe ExtensionDataObject et accédées à travers la propriété ExtensionData. Dans une opération d'aller-retour où les données sont reçues, traitées et renvoyées, les données supplémentaires sont renvoyées intactes à l'expéditeur d'origine. Cette technique est utile pour stocker des données reçues de versions futures du contrat. Si vous n'implémentez pas l'interface, les données supplémentaires sont ignorées et éliminées pendant une opération d'aller-retour.
Pour utiliser cette fonctionnalité de contrôle de version
Implémente l'interface IExtensibleDataObject dans une classe.
Ajoutez la propriété ExtensionData à votre type.
Ajoutez un membre privé de type ExtensionDataObject à la classe.
Implémentez les méthodes get et set pour la propriété à l'aide du nouveau membre privé.
Appliquez l'attribut DataContractAttribute à la classe. Affectez les valeurs appropriées aux propriétés Name et Namespace si nécessaire.
Pour plus d’informations sur le contrôle de version des types, consultez Gestion des versions de contrat de données. Pour plus d’informations sur la création de contrats de données compatibles avec le transfert, consultez Contrats de données compatibles avec le transfert. Pour plus d’informations sur les contrats de données, consultez Utilisation de contrats de données.
Propriétés
ExtensionData |
Obtient ou définit la structure qui contient des données supplémentaires. |