Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
Tous les types visibles publiquement qui ont un constructeur qui n’a pas de paramètres.
Types de contrats de données. Il s’agit de types auxquels l’attribut DataContractAttribute a été appliqué. Les nouveaux types personnalisés qui représentent des objets métier doivent normalement être créés en tant que types de contrat de données. Pour plus d’informations, consultez Utilisation des contrats de données et des types sérialisables.
Types de collection. Il s’agit de types qui représentent des listes de données. Il peut s’agir de tableaux réguliers de types ou de types de collection, tels que ArrayList et Dictionary<TKey,TValue>. L’attribut CollectionDataContractAttribute peut être utilisé pour personnaliser la sérialisation de ces types, mais n’est pas obligatoire. Pour plus d’informations, consultez Types de collecte dans les contrats de données.
Types d’énumération. Les énumérations, y compris les énumérations d’indicateurs, sont sérialisables. Si vous le souhaitez, les types d’énumération peuvent être marqués avec l’attribut DataContractAttribute , auquel cas chaque membre participant à la sérialisation doit être marqué avec l’attribut EnumMemberAttribute . Les membres qui ne sont pas marqués ne sont pas sérialisés. Pour plus d’informations, consultez Types d’énumération dans les contrats de données.
Types primitifs .NET Framework. Les types suivants intégrés au .NET Framework peuvent tous être sérialisés et sont considérés comme des types primitifs : Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object, et String.
Autres types primitifs. Ces types ne sont pas des primitives dans le .NET Framework, mais sont traités comme des primitives au format XML sérialisé. Ces types sont DateTime, , DateTimeOffsetTimeSpan, GuidUri, , XmlQualifiedName, et des tableaux de Byte.
Remarque
Contrairement à d’autres types primitifs, DateTimeOffset n’est pas un type connu par défaut. Pour plus d’informations, consultez Types connus de contrat de données).
Types marqués avec l’attribut SerializableAttribute . De nombreux types inclus dans la bibliothèque de classes de base .NET Framework appartiennent à cette catégorie. DataContractSerializer prend totalement en charge ce modèle de programmation de sérialisation, utilisé par .NET Framework Remoting, BinaryFormatteret SoapFormatter, incluant la prise en charge de l'interface ISerializable .
Types qui représentent des XML bruts ou des données relationnelles ADO.NET. Les types XmlElement et le tableau de types XmlNode sont pris en charge comme moyen de représenter directement XML. En outre, les types qui implémentent l'interface IXmlSerializable sont pris en charge, ainsi que l'attribut associé XmlSchemaProviderAttribute, et les types XDocument et XElement. Le type ADO.NETDataTable et le DataSet type (ainsi que ses classes dérivées typées) implémentent toutes l’interface IXmlSerializable et correspondent donc à cette catégorie. Pour plus d’informations, consultez XML et ADO.NET Types dans les contrats de données.
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
readonlychamps (à la foispublicetprivate) 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 champsreadonlyne 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
DBNullvers l’instance singleton. Étant donné queDBNullest un type sérialisable, cela nécessite SerializationFormatter l’autorisation.