Compartir a través de


Importación y exportación de esquemas

Windows Communication Foundation (WCF) incluye un nuevo motor de la serialización, DataContractSerializer. DataContractSerializer traduce entre los objetos .NET Framework y XML (en ambas direcciones). Además del propio serializador, WCF incluye la importación del esquema asociado y los mecanismos de exportación de esquema. Esquema es una descripción formal, precisa y que las máquinas pueden interpretar de la forma de XML que el serializador genera o a la que el deserializador puede tener acceso. WCF utiliza el lenguaje de definición de esquemas XML (XSD) de World Wide Web Consortium (W3C) como la representación del esquema, que puede interoperar ampliamente con numerosas plataformas de otros fabricantes.

El componente de importación de esquema, XsdDataContractImporter, toma un documento de esquema XSD y genera las clases .NET Framework (normalmente las clases de contrato de datos) de manera que los formularios serializados se corresponden con el esquema dado.

Por ejemplo, el fragmento de esquema siguiente:

genera el tipo siguiente (simplificado ligeramente para una mejor interpretación).

Observe que el tipo generado sigue varios procedimientos recomendados para el contrato de datos (se encuentran en Procedimientos recomendados: Creación de versiones de contratos de datos):

  • El tipo implementa la interfaz IExtensibleDataObject. Para obtener más información, consulte Contratos de datos compatibles con el reenvío.
  • Los miembros de datos se implementan como propiedades públicas que se ajustan a los campos privados.
  • La clase es una clase parcial y se pueden realizar adiciones sin modificar el código generado.

XsdDataContractExporter le permite hacer lo contrario: tomar los tipos que son serializables con DataContractSerializer y generar un documento de esquema XSD.

La fidelidad no está garantizada

No se garantiza que el esquema o los tipos realicen un viaje de ida y vuelta (round trip) con fidelidad total. (Un viaje de ida y vuelta (round trip) significa importar un esquema para crear un conjunto de clases y exportar el resultado para crear de nuevo un esquema.) Es posible que no se devuelva el mismo esquema. Invertir el proceso no garantiza tampoco conservar la fidelidad. (Exporte un tipo para generar su esquema y, a continuación, importe el tipo de nuevo. Es improbable que se devuelva el mismo tipo.)

Tipos admitidos

El modelo del contrato de datos sólo admite un subconjunto limitado del esquema de WC3. Cualquier esquema que no se ajusta a este subconjunto producirá una excepción durante el proceso de importación. Por ejemplo, no hay ninguna manera de especificar que un miembro de datos de un contrato de datos deba serializarse como un atributo XML. Así, los esquemas que requieren el uso de atributos XML no se admiten y producirán excepciones durante la importación ya que es imposible generar un contrato de datos con la proyección de XML correcta.

Por ejemplo, el fragmento del esquema siguiente no se puede importar utilizando los valores de importación predeterminados.

Para obtener más información, consulte Referencia de esquema de contrato de datos. Si un esquema no se ajusta a las reglas del contrato de datos, utilice un motor de serialización diferente. Por ejemplo, XmlSerializer utiliza su propio mecanismo de importación de esquema independiente. Además, hay un modo de importación especial en el que se expande el intervalo de esquema compatible. Para obtener más información, consulte la sección sobre cómo generar los tipos de IXmlSerializable en Importación del esquema para generar clases.

XsdDataContractExporter admite cualquier tipo de .NET Framework que pueda serializarse con DataContractSerializer. Para obtener más información, consulte Tipos admitidos por el serializador de contrato de datos. Tenga en cuenta que el esquema generado mediante XsdDataContractExporter son normalmente datos válidos que XsdDataContractImporter puede utilizar (a menos que se use XmlSchemaProviderAttribute para personalizar el esquema).

Para obtener más información acerca de usando XsdDataContractImporter, vea Importación del esquema para generar clases.

Para obtener más información acerca de usando XsdDataContractExporter, vea Exportación de esquemas desde las clases.

Consulte también

Referencia

DataContractSerializer
XsdDataContractImporter
XsdDataContractExporter

Conceptos

Importación del esquema para generar clases
Exportación de esquemas desde las clases