Tipos admitidos por el serializador de contrato de datosTypes Supported by the Data Contract Serializer

Windows Communication Foundation (WCF) utiliza el DataContractSerializer como su motor de serialización predeterminado para convertir datos en XML y para convertir XML en datos.Windows Communication Foundation (WCF) uses the DataContractSerializer as its default serialization engine to convert data into XML and to convert XML back into data. DataContractSerializer está diseñado para serializar los tipos de contrato de datos .The DataContractSerializer is designed to serialize data contract types. Sin embargo, admite muchos otros tipos, de los que se puede pensar que tienen un contrato de datos implícito.However, it supports many other types, which can be thought of as having an implicit data contract. A continuación, se muestra una lista completa de los tipos que se pueden serializar:The following is a complete list of types that can be serialized:

Limitaciones del uso de ciertos tipos en modo de confianza parcialLimitations of Using Certain Types in Partial Trust Mode

A continuación, se enumeran las limitaciones que existen al utilizar ciertos tipos en escenarios de modo de confianza parcial:The following is a list of limitations when using certain types in partial trust mode scenarios:

  • 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 .To serialize or deserialize a type that implements ISerializable in partially-trusted code using the DataContractSerializer requires the SerializationFormatter and UnmanagedCode permissions.

  • Cuando se ejecuta el código WCF confianza parcial modo, la serialización y deserialización de readonly campos (ambos public y private) no se admite.When running WCF code in Partial Trust mode, the serialization and deserialization of readonly fields (both public and private) is not supported. Esto se debe a que el IL generado no se puede comprobar y, por consiguiente, requiere permisos elevados.This is because the generated IL is unverifiable and therefore requires elevated permissions.

  • Tanto DataContractSerializer como XmlSerializer se admiten en un entorno de confianza parcial.Both the DataContractSerializer and the XmlSerializer are supported in a partial trust environment. Sin embargo, el uso de DataContractSerializer está sujeto a las condiciones siguientes:However, use of the DataContractSerializer is subject to the following conditions:

    • Todos los tipos [DataContract] serializables deben ser públicos.All serializable [DataContract] types must be public.

    • Todos los campos [DataMember] serializables o propiedades en un tipo [DataContract] deben ser públicos y de lectura/escritura.All serializable [DataMember] fields or properties in a [DataContract] type must be public and read/write. La serialización y deserialización de readonly campos no se admite cuando se ejecuta WCF en una aplicación de confianza parcial.The serialization and deserialization of readonly fields is not supported when running WCF in a partially-trusted application.

    • El atributo [Serializable]/ISerializable] no se admite en un entorno de confianza parcial.The [Serializable]/ISerializable] programming model is not supported in a partial trust environment.

    • Los tipos conocidos se deben especificar mediante código o configuración del nivel de equipo (Machine.config).Known types must be specified in code or machine-level configuration (Machine.config). Los tipos conocidos no se pueden especificar en la configuración del nivel de de aplicación por razones de seguridad.Known types cannot be specified in application-level configuration for security reasons.

  • 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)].Types that implement IObjectReference throw an exception in a partially-trusted environment because the GetRealObject method requires the security permission [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Notas adicionales sobre serializaciónAdditional Notes on Serialization

Las reglas siguientes también se aplican a los tipos admitidos por el serializador de contrato de datos:The following rules also apply to types supported by the Data Contract Serializer:

  • El serializador del contrato de datos admite totalmente los tipos genéricos.Generic types are fully supported by the data contract serializer.

  • El serializador del contrato de datos admite totalmente los tipos NULL.Nullable types are fully supported by the data contract serializer.

  • Los tipos de interfaz se tratan como Object o, en el caso de interfaces de colección, como tipos de colección.Interface types are treated either as Object or, in the case of collection interfaces, as collection types.

  • Se admiten tanto las estructuras como las clases.Both structures and classes are supported.

  • El DataContractSerializer no admite el modelo de programación utilizado por el XmlSerializer y servicios Web ASP.NET.The DataContractSerializer does not support the programming model used by the XmlSerializer and ASP.NET Web services. En particular, no admite atributos como XmlElementAttribute y XmlAttributeAttribute.In particular, it does not support attributes like XmlElementAttribute and XmlAttributeAttribute. Para habilitar la compatibilidad con este modelo de programación, WCF debe cambiarse para utilizar el XmlSerializer en lugar de la DataContractSerializer.To enable support for this programming model, WCF must be switched to use the XmlSerializer instead of the DataContractSerializer.

  • El tipo DBNull se trata de una manera especial.The DBNull type is treated in a special way. 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.It is a singleton type, and upon deserialization the deserializer respects the singleton constraint and points all DBNull references to the singleton instance. Dado que DBNull es un tipo serializable, exige permiso SerializationFormatter .Because DBNull is a serializable type, it demands SerializationFormatter permission.

Vea tambiénSee also