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

Windows Communication Foundation (WCF) utilise la classe DataContractSerializer comme moteur de sérialisation par défaut pour convertir les données en XML et pour convertir du CODE XML 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 d'utilisation de certains types en mode de confiance partielle

Voici une liste de limitations qui s'appliquent en cas d'utilisation de certains types dans les scénarios en mode de confiance partielle :

  • Pour sérialiser ou désérialiser un type qui implémente ISerializable dans un code d'un niveau de confiance partielle utilisant DataContractSerializer , les autorisations SerializationFormatter et UnmanagedCode sont nécessaires.

  • Lors de l’exécution du code WCF en mode Partial Trust, la sérialisation et la désérialisation des champs readonly (à la fois public et private) ne sont pas prises en charge. C'est parce que l'IL généré est incontrôlable et par conséquent requiert des autorisations élevées.

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

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

    • 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 en readonly ne sont pas prises en charge lors de l’exécution de WCF dans une application de confiance partielle.

    • L'attribut [Serializable]/ISerializable] n'est pas pris en charge dans un environnement de confiance partielle.

    • Les types connus doivent être spécifiés dans le code ou dans 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é.

  • Les types qui implémentent IObjectReference lèveront une exception dans un environnement de confiance partielle car la méthode GetRealObject requiert l'autorisation de sécurité [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Remarques 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 pleinement pris en charge par le sérialiseur de contrat de données.

  • Les types de valeurs Nullable sont pleinement 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 la collection, comme types 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 les services XmlSerializer et ASP.NET Web. En particulier, il ne prend pas en charge d'attributs comme XmlElementAttribute et XmlAttributeAttribute. Pour activer la prise en charge pour ce modèle de programmation, WCF doit être basculé pour utiliser XmlSerializer au lieu de DataContractSerializer.

  • Le type DBNull est traité d'une façon spéciale. C'est un type singleton et, sur la désérialisation, le désérialiseur respecte la contrainte singleton et pointe toutes les références DBNull à l'instance singleton. Parce que DBNull est un type sérialisable, il demande l'autorisation SerializationFormatter .

Voir aussi