Partager via


Types pris en charge par le sérialiseur de contrat de données

Windows Communication Foundation (WCF) utilise le DataContractSerializer moteur de sérialisation par défaut pour convertir les données en XML et pour les convertir en données. DataContractSerializer est conçu pour sérialiser des types de contrat de données . Toutefois, il prend en charge de nombreux autres types, qui peuvent être considérés comme ayant un contrat de données implicite. Voici une liste complète des types qui peuvent être sérialisés :

Limitations de l’utilisation de certains types en mode confiance partielle

Voici une liste de limitations lors de l’utilisation de certains types dans des scénarios en mode confiance partielle :

  • Pour sérialiser ou désérialiser un type qui implémente ISerializable dans du code partiellement approuvé à l'aide de DataContractSerializer, les autorisations SerializationFormatter et UnmanagedCode sont requises.

  • Lors de l’exécution du code WCF en mode Confiance partielle , la sérialisation et la désérialisation des readonly champs (à la fois public et private) n’est pas prise en charge. Cela est dû au fait que l’il généré n’est pas vérifiable et nécessite donc des autorisations élevées.

  • Le DataContractSerializer et le XmlSerializer sont pris en charge dans un environnement de confiance partielle. Toutefois, l’utilisation de l’objet DataContractSerializer est soumise aux conditions suivantes :

    • Tous les types sérialisables [DataContract] doivent être publics.

    • Tous les champs ou les propriétés [DataMember] sérialisables dans un type [DataContract] doivent être "public" et en lecture/écriture. La sérialisation et la désérialisation des champs readonly ne sont pas prises en charge lors de l'exécution de WCF dans une application partiellement approuvée.

    • Le [Serializable]/ISerializable] modèle de programmation n’est pas pris en charge dans un environnement d’approbation partielle.

    • Les types connus doivent être spécifiés dans le code ou la configuration au niveau de l’ordinateur (Machine.config). Les types connus ne peuvent pas être spécifiés dans la configuration au niveau de l’application pour des raisons de sécurité.

  • Types qui implémentent IObjectReference lancent une exception dans un environnement partiellement approuvé, car la méthode GetRealObject requiert l’autorisation de sécurité [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Notes supplémentaires sur la sérialisation

Les règles suivantes s’appliquent également aux types pris en charge par le sérialiseur de contrat de données :

  • Les types génériques sont entièrement pris en charge par le sérialiseur de contrat de données.

  • Les types de valeurs nullables sont entièrement pris en charge par le sérialiseur de contrat de données.

  • Les types d’interface sont traités comme Object ou, dans le cas d’interfaces de collection, comme des types de collection.

  • À la fois les structures et les classes sont prises en charge.

  • DataContractSerializer ne prend pas en charge le modèle de programmation utilisé par le XmlSerializer et les services Web ASP.NET. En particulier, il ne prend pas en charge les attributs tels XmlElementAttribute et XmlAttributeAttribute. Pour activer la prise en charge de ce modèle de programmation, WCF doit être basculé pour utiliser le XmlSerializer au lieu du DataContractSerializer.

  • Le DBNull type est traité de manière spéciale. Il s’agit d’un type singleton, et lors de la désérialisation, le désérialiseur respecte la contrainte singleton et redirige toutes les références DBNull vers l’instance singleton. Étant donné que DBNull est un type sérialisable, cela nécessite SerializationFormatter l’autorisation.

Voir aussi