Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
Aplique el atributo DataContractAttribute a tipos (clases, estructuras o enumeraciones) que se usan en las operaciones de serialización y deserialización mediante el DataContractSerializer. Si envía o recibe mensajes mediante la infraestructura de Windows Communication Foundation (WCF), también debería aplicar DataContractAttribute a cualquier clase que contenga y manipule los datos enviados en los mensajes. Para obtener más información sobre los contratos de datos, consulte Utilización de contratos de datos.
También debe aplicar el DataMemberAttribute a cualquier campo, propiedad o evento que contenga valores que desee serializar. Al aplicar el DataContractAttribute, habilitas explícitamente el DataContractSerializer para serializar y deserializar datos.
Precaución
Puede aplicar DataMemberAttribute a los campos privados. Tenga en cuenta que los datos devueltos por el campo (incluso si es privado) se serializan y deserializan, y por lo tanto se pueden ver o interceptar mediante un usuario o proceso malintencionados.
Para obtener más información sobre los contratos de datos, consulte los temas enumerados en Uso de contratos de datos.
Contratos de datos
Un contrato de datos es una descripción abstracta de un conjunto de campos con un nombre y un tipo de datos para cada campo. El contrato de datos existe fuera de cualquier implementación única para permitir que los servicios de distintas plataformas interoperan. Siempre que los datos pasados entre los servicios se ajusten al mismo contrato, todos los servicios pueden procesar los datos. Este procesamiento también se conoce como un sistema de acoplamiento flexible. Un contrato de datos también es similar a una interfaz en que el contrato especifica cómo se deben entregar los datos para que una aplicación pueda procesarlos. Por ejemplo, el contrato de datos puede llamar a un tipo de datos denominado "Person" que tiene dos campos de texto, denominados "FirstName" y "LastName". Para crear un contrato de datos, aplique el DataContractAttribute a la clase y aplique el DataMemberAttribute a los campos o propiedades que se deben serializar. Cuando se serializa, los datos se ajustan al contrato de datos integrado implícitamente en el tipo .
Nota:
Un contrato de datos difiere significativamente de una interfaz real en su comportamiento de herencia. Las interfaces se heredan mediante cualquiera de los tipos derivados. Cuando se aplica a DataContractAttribute una clase base, los tipos derivados no heredan el atributo ni el comportamiento. Sin embargo, si un tipo derivado tiene un contrato de datos, los miembros de datos de la clase base se serializan. No obstante, debe aplicar DataMemberAttribute a los nuevos miembros en una clase derivada para que se puedan serializar.
Documentos de esquema XML y la herramienta SvcUtil
Si va a intercambiar datos con otros servicios, debe describir el contrato de datos. Para la versión actual de DataContractSerializer, se puede usar un esquema XML para definir contratos de datos. (Se pueden usar otras formas de metadatos/descripción para el mismo propósito). Para crear un esquema XML desde la aplicación, use la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) con la opción de línea de comandos /dconly . Cuando la entrada a la herramienta es un ensamblado, de forma predeterminada, la herramienta genera un conjunto de esquemas XML que definen todos los tipos de contrato de datos que se encuentran en ese ensamblado. Por el contrario, también puede usar la herramienta Svcutil.exe para crear definiciones de clase de Visual Basic o C# que cumplan los requisitos de esquemas XML que usan construcciones que se pueden expresar mediante contratos de datos. En este caso, no se requiere la opción de línea de comandos /dconly .
Si la entrada de la herramienta Svcutil.exe es un esquema XML, de forma predeterminada, la herramienta crea un conjunto de clases. Si examina esas clases, observará que se ha aplicado DataContractAttribute. Puede usar esas clases para crear una nueva aplicación para procesar los datos que deben intercambiarse con otros servicios.
También puede ejecutar la herramienta en un punto de conexión que devuelva un documento de Lenguaje de descripción de servicios web (WSDL) para generar automáticamente el código y la configuración para crear un cliente de Windows Communication Foundation (WCF). El código generado incluye tipos marcados con .DataContractAttribute
Reutilización de tipos existentes
Un contrato de datos tiene dos requisitos básicos: un nombre estable y una lista de miembros. El nombre estable consta del identificador uniforme de recursos (URI) del espacio de nombres y del nombre local del contrato. De forma predeterminada, cuando se aplica DataContractAttribute a una clase, se usa el nombre de la clase como nombre local y el espacio de nombres de la clase, con el prefijo "http://schemas.datacontract.org/2004/07/"
, como URI del espacio de nombres. Puede invalidar los valores predeterminados estableciendo las Name propiedades y Namespace . También puede cambiar el espacio de nombres aplicando ContractNamespaceAttribute al espacio de nombres. Use esta funcionalidad cuando tenga un tipo existente que procese los datos exactamente como necesite, pero que tenga un espacio de nombres y un nombre de clase diferentes del contrato de datos. Al invalidar los valores predeterminados, puede reutilizar el tipo existente y hacer que los datos serializados se ajusten al contrato de datos.
Nota:
En cualquier código, puede usar la palabra DataContract
en lugar de la más larga DataContractAttribute.
Versionamiento
Un contrato de datos también puede acomodar versiones posteriores de sí mismas. Es decir, cuando una versión posterior del contrato incluye datos adicionales, esos datos se almacenan y devuelven a un remitente sin modificar. Para ello, implemente la IExtensibleDataObject interfaz .
Para obtener más información sobre el control de versiones, consulte Control de versiones del contrato de datos.