Tipos admitidos por el serializador de contrato de datos

Windows Communication Foundation (WCF) usa DataContractSerializer como el 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 WCF en el modo Confianza parcial, la serialización y deserialización de los campos readonly (tanto public como private) no es compatible. Esto se debe a que el IL generado no se puede comprobar y, por consiguiente, requiere permisos elevados.

  • Tanto DataContractSerializer como XmlSerializer se admiten en un entorno de confianza parcial. Sin embargo, el uso de DataContractSerializer está sujeto a las condiciones siguientes:

    • 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 cuando se ejecuta WCF en una aplicación de confianza parcial.

    • El atributo [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 de 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 de valor que admite un valor 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 que usan XmlSerializer y los servicios web ASP.NET. En particular, no admite atributos como XmlElementAttribute y XmlAttributeAttribute. Para habilitar la compatibilidad de este modelo de programación, WCF se debe modificar 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