IExtensibleDataObject Interface
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece uma estrutura de dados para armazenar dados adicionais encontrados durante XmlObjectSerializer a desserialização de um tipo marcado com o DataContractAttribute atributo.
public interface class IExtensibleDataObject
public interface IExtensibleDataObject
type IExtensibleDataObject = interface
Public Interface IExtensibleDataObject
- Derivado
Exemplos
O código seguinte mostra uma instância de um tipo (PersonVersion2) que é a segunda versão de um tipo serializável (Person). A segunda versão contém dados extra (ID campo) que não estão presentes na primeira versão.
// 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
Observações
A IExtensibleDataObject interface fornece uma única propriedade que define ou retorna uma estrutura usada para armazenar dados externos a um contrato de dados. Os dados extras são armazenados em uma instância da ExtensionDataObject classe e acessados através da ExtensionData propriedade. Em uma operação de ida e volta em que os dados são recebidos, processados e enviados de volta, os dados extras são enviados de volta ao remetente original intactos. Isso é útil para armazenar dados recebidos de versões futuras do contrato. Se você não implementar a interface, todos os dados extras serão ignorados e descartados durante uma operação de ida e volta.
Para usar esta função de controlo de versão
Implemente a IExtensibleDataObject interface em uma classe.
Adicione a propriedade ExtensionData ao seu tipo.
Adicione um membro privado do tipo ExtensionDataObject à classe.
Implemente métodos get e set para a propriedade usando o novo membro privado.
Aplique o atributo DataContractAttribute à classe. Defina as propriedades Name e Namespace para valores apropriados, se necessário.
Para obter mais informações sobre controle de versão de tipos, consulte Controle de versão de contrato de dados. ** Para obter informações sobre como criar contratos de dados compatíveis com versões futuras, consulte Forward-Compatible Contratos de dados. Para obter mais informações sobre contratos de dados, consulte Usando contratos de dados.
Propriedades
| Name | Descrição |
|---|---|
| ExtensionData |
Obtém ou define a estrutura que contém dados extra. |