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

Windows Communication Foundation (WCF) utilise DataContractSerializer comme moteur de sérialisation par défaut pour convertir des données en xml et pour convertir xml en données. DataContractSerializer est conçu pour sérialiser des types de DataContractSerializer . 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 de code WCF en mode de confiance partielle , la sérialisation et la désérialisation des champs (à 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 readonly champs 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 valeur Nullable 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 la collection, comme types collection.

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

  • le DataContractSerializer ne prend pas en charge le modèle de programmation utilisé par le et les XmlSerializer services Web ASP.NET. En particulier, il ne prend pas en charge d'attributs comme XmlElementAttribute et XmlAttributeAttribute. Pour activer la prise en charge de ce modèle de programmation, WCF doit être basculé pour utiliser à la XmlSerializer place 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