Importação e exportação de esquemasSchema Import and Export

Windows Communication Foundation (WCF) inclui um novo mecanismo de serialização, o DataContractSerializer .Windows Communication Foundation (WCF) includes a new serialization engine, the DataContractSerializer. O se DataContractSerializer traduz entre objetos de .NET Framework e XML (em ambas as direções).The DataContractSerializer translates between .NET Framework objects and XML (in both directions). Além do próprio serializador, o WCF inclui mecanismos de importação de esquema e exportação de esquema associados.In addition to the serializer itself, WCF includes associated schema import and schema export mechanisms. O esquema é uma descrição formal, precisa e legível por computador da forma do XML que o serializador produz ou que o desserializador pode acessar.Schema is a formal, precise, and machine-readable description of the shape of XML that the serializer produces or that the deserializer can access. O WCF usa o XSD (linguagem de definição de esquema XML) World Wide Web Consortium (W3C) como sua representação de esquema, o que é amplamente interoperável com várias plataformas de terceiros.WCF uses the World Wide Web Consortium (W3C) XML Schema definition language (XSD) as its schema representation, which is widely interoperable with numerous third-party platforms.

O componente de importação de esquema, XsdDataContractImporter , usa um documento de esquema XSD e gera .NET Framework classes (normalmente classes de contrato de dados), de modo que os formulários serializados correspondam ao esquema fornecido.The schema import component, XsdDataContractImporter, takes an XSD schema document and generates .NET Framework classes (normally data contract classes) such that the serialized forms correspond to the given schema.

Por exemplo, o seguinte fragmento de esquema:For example, the following schema fragment:

XsdDataContractImporter importer = new XsdDataContractImporter();
importer.Options.Namespaces.Add(new KeyValuePair<string,string>("http://schemas.contoso.com/carSchema", "Contoso.Cars"));
Dim importer As New XsdDataContractImporter
importer.Options.Namespaces.Add(New KeyValuePair(Of String, String)("http://schemas.contoso.com/carSchema", "Contoso.Cars"))

gera o seguinte tipo (um pouco simplificado para melhor legibilidade).generates the following type (simplified slightly for better readability).

[DataContract]
public partial class Vehicle : IExtensibleDataObject
{
    private int yearField;
    private string colorField;

    [DataMember] public int year {
        get {return this.yearField;}
        set {this.yearField=value;}
    }
[DataMember] public string color{
        get {return this.colorField;}
        set {this.colorField=value;}
    }

    private ExtensionDataObject extensionDataField;
    public ExtensionDataObject ExtensionData {
        get {return this.extensionDataField;}
        set {this.extensionDataField=value;}
    }
}
Partial Class Vehicle
    Implements IExtensibleDataObject

    Private yearField As Integer
    Private colorField As String

    <DataMember()> _
    Public Property year() As Integer
        Get
            Return Me.yearField
        End Get
        Set
            Me.yearField = value
        End Set
    End Property

    <DataMember()> _
    Public Property color() As String
        Get
            Return Me.colorField
        End Get
        Set
            Me.colorField = value
        End Set
    End Property
    Private extensionDataField As ExtensionDataObject

    Public Property ExtensionData() As ExtensionDataObject _
        Implements IExtensibleDataObject.ExtensionData
        Get
            Return Me.extensionDataField
        End Get
        Set(ByVal value As ExtensionDataObject)
            Me.extensionDataField = value
        End Set
    End Property
End Class

Observe que o tipo gerado segue várias práticas recomendadas de contrato de dados (encontradas nas práticas recomendadas: controle de versão de contrato de dados):Note that the generated type follows several data contract best practices (found in Best Practices: Data Contract Versioning):

O XsdDataContractExporter permite que você faça o inverso — pegue os tipos que são serializáveis com o DataContractSerializer e gere um documento de esquema XSD.The XsdDataContractExporter enables you to do the reverse—take types that are serializable with the DataContractSerializer and generate an XSD Schema document.

A fidelidade não é garantidaFidelity Is Not Guaranteed

Não há garantia de que o esquema ou os tipos façam uma viagem de ida e volta com fidelidade total.It is not guaranteed that schema or types make a round trip with total fidelity. (Uma viagem de ida e volta significa importar um esquema para criar um conjunto de classes e exportar o resultado para criar um esquema novamente.) O mesmo esquema não pode ser retornado.(A round trip means to import a schema to create a set of classes, and export the result to create a schema again.) The same schema may not be returned. A reversão do processo também não é garantida para preservar a fidelidade.Reversing the process is also not guaranteed to preserve fidelity. (Exporte um tipo para gerar seu esquema e, em seguida, importe o tipo de volta.(Export a type to generate its schema, and then import the type back. É improvável que o mesmo tipo seja retornado.)It is unlikely the same type is returned.)

Tipos com suporteSupported Types

O modelo de contrato de dados dá suporte a apenas um subconjunto limitado do esquema WC3.The data contract model supports only a limited subset of the WC3 schema. Qualquer esquema que não esteja em conformidade com esse subconjunto causará uma exceção durante o processo de importação.Any schema that does not conform to this subset will cause an exception during the import process. Por exemplo, não há como especificar que um membro de dados de um contrato de dados deve ser serializado como um atributo XML.For example, there is no way to specify that a data member of a data contract should be serialized as an XML attribute. Portanto, os esquemas que exigem o uso de atributos XML não têm suporte e causarão exceções durante a importação, pois é impossível gerar um contrato de dados com a projeção XML correta.Thus, schemas that require the use of XML attributes are not supported and will cause exceptions during import, because it is impossible to generate a data contract with the correct XML projection.

Por exemplo, o fragmento de esquema a seguir não pode ser importado usando as configurações de importação padrão.For example, the following schema fragment cannot be imported using the default import settings.

<xs:complexType name="Vehicle">
  <xs:sequence>
    <xs:element name="year" type="xs:int" />
    <xs:element name="color" type="xs:string" />
  </xs:sequence>
  <xs:attribute name="engineHorsePower" type="xs:int" />
</xs:complexType>

Para obter mais informações, consulte referência de esquema de contrato de dados.For more information, see Data Contract Schema Reference. Se um esquema não estiver em conformidade com as regras de contrato de dados, use um mecanismo de serialização diferente.If a schema does not conform to the data contract rules, use a different serialization engine. Por exemplo, o XmlSerializer usa seu próprio mecanismo de importação de esquema separado.For example, the XmlSerializer uses its own separate schema import mechanism. Além disso, há um modo de importação especial no qual o intervalo de esquema com suporte é expandido.Also, there is a special import mode in which the range of supported schema is expanded. Para obter mais informações, consulte a seção sobre como gerar IXmlSerializable tipos em importando o esquema para gerar classes.For more information, see the section about generating IXmlSerializable types in Importing Schema to Generate Classes.

O XsdDataContractExporter oferece suporte a qualquer tipo de .NET Framework que possa ser serializado com o DataContractSerializer .The XsdDataContractExporter supports any .NET Framework types that can be serialized with the DataContractSerializer. Para obter mais informações, consulte tipos com suporte no serializador de contrato de dados.For more information, see Types Supported by the Data Contract Serializer. Observe que o esquema gerado usando os XsdDataContractExporter dados normalmente são válidos que o XsdDataContractImporter pode usar (a menos que XmlSchemaProviderAttribute seja usado para personalizar o esquema).Note that schema generated using the XsdDataContractExporter is normally valid data that the XsdDataContractImporter can use (unless the XmlSchemaProviderAttribute is used to customize the schema).

Para obter mais informações sobre como usar o XsdDataContractImporter , consulte importando o esquema para gerar classes.For more information about using the XsdDataContractImporter, see Importing Schema to Generate Classes.

Para obter mais informações sobre como usar o XsdDataContractExporter , consulte exportando esquemas de classes.For more information about using the XsdDataContractExporter, see Exporting Schemas from Classes.

Consulte tambémSee also