Share via


Tipos admitidos por el serializador de contrato de datos

Windows Communication Foundation (WCF) utiliza DataContractSerializer como su motor de serialización predeterminado para convertir los datos en XML y viceversa. DataContractSerializer está diseñado para serializar los tipos de contrato de datos. Sin embargo, admite muchos otros tipos, de los que se puede pensar que tienen un contrato de datos implícito. A continuación, se muestra una lista completa de los tipos que se pueden serializar:

Limitaciones del uso de ciertos tipos en modo de confianza parcial

A continuación, se enumeran las limitaciones que existen al utilizar ciertos tipos en escenarios de modo de confianza parcial:

  • Para serializar o deserializar un tipo que implementa ISerializable en código de confianza parcial mediante el uso de DataContractSerializer se requieren los permisos SerializationFormatter y UnmanagedCode.
  • Al ejecutar el código de WCF en el modo Confianza parcial, la serialización y deserialización de los campos readonly (tanto public como private) no se admite. Esto se debe a que el IL generado no se puede comprobar y, por consiguiente, requiere permisos elevados.
  • Tanto DataContractSerializer como XmlSerializer se admiten totalmente en un entorno de confianza parcial. Sin embargo, el uso de DataContractSerializer está sujeto a las siguientes condiciones:
    • Todos los tipos [DataContract] serializables deben ser públicos.
    • Todos los campos [DataMember] serializables o propiedades en un tipo [DataContract] deben ser públicos y de lectura/escritura. No se admite la serialización y deserialización de los campos readonly al ejecutar WCF en una aplicación de confianza parcial.
    • El modelo de programación [Serializable]/ISerializable] no se admite en un entorno de confianza parcial.
    • Los tipos conocidos se deben especificar mediante código o configuración del nivel de equipo (Machine.config). Los tipos conocidos no se pueden especificar en la configuración del nivel de la aplicación por razones de seguridad.
  • Los tipos que implementan IObjectReference producirán una excepción en un entorno de confianza parcial porque el método GetRealObject requiere el permiso de seguridad [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Notas adicionales sobre serialización

Las reglas siguientes también se aplican a los tipos admitidos por el serializador de contrato de datos:

  • El serializador del contrato de datos admite totalmente los tipos genéricos.
  • El serializador del contrato de datos admite totalmente los tipos NULL.
  • Los tipos de interfaz se tratan como Object o, en el caso de interfaces de colección, como tipos de colección.
  • Se admiten tanto las estructuras como las clases.
  • DataContractSerializer no admite el modelo de programación utilizado por los servicio web ASP.NET y XmlSerializer. En particular, no admite atributos como XmlElementAttribute y XmlAttributeAttribute. Para habilitar la compatibilidad de este modelo de programación, WCF se deben cambiar para que use XmlSerializer en lugar de DataContractSerializer.
  • El tipo DBNull se trata de una manera especial. Es un tipo singleton y tras la deserialización, el deserializador respeta la restricción de singleton y señala todas las referencias DBNull a la instancia de singleton. Dado que DBNull es un tipo serializable, exige permiso SerializationFormatter.

Consulte también

Conceptos

Clases de XML y ADO.NET en contratos de datos
Utilización de contratos de datos
Tipos serializables
Tipos de colección en contratos de datos
Tipos de enumeración en contratos de datos