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.
Cet article fournit des remarques supplémentaires à la documentation de référence de cette API.
Utilisez la DataContractSerializer classe pour sérialiser et désérialiser des instances d’un type dans un flux ou un document XML. Par exemple, vous pouvez créer un type nommé Person avec des propriétés qui contiennent des données essentielles, telles qu’un nom et une adresse. Vous pouvez ensuite créer et manipuler une instance de la Person classe et écrire toutes ses valeurs de propriété dans un document XML pour une récupération ultérieure, ou dans un flux XML pour le transport immédiat. Plus important, il DataContractSerializer est utilisé pour sérialiser et désérialiser les données envoyées dans les messages Windows Communication Foundation (WCF). Appliquez l’attribut DataContractAttribute aux classes et l’attribut DataMemberAttribute aux membres de classe pour spécifier les propriétés et les champs sérialisés.
Pour obtenir la liste des types qui peuvent être sérialisés, consultez Types pris en charge par le sérialiseur de contrat de données.
Pour utiliser le DataContractSerializer, commencez par créer une instance de classe et un objet approprié pour écrire ou lire le format ; par exemple, une instance du XmlDictionaryWriter. Appelez ensuite la WriteObject méthode pour conserver les données. Pour récupérer des données, créez un objet approprié pour lire le format de données (tel qu’un XmlDictionaryReader document XML) et appelez la ReadObject méthode.
Pour plus d’informations sur l’utilisation de l’élément DataContractSerializer, consultez Sérialisation et Désérialisation.
Vous pouvez définir le type d’un sérialiseur de contrat de données à l’aide de l’élément <dataContractSerializer> dans un fichier de configuration d’application cliente.
Préparer des classes pour la sérialisation ou la désérialisation
Le DataContractSerializer est utilisé en combinaison avec les classes DataContractAttribute et DataMemberAttribute. Pour préparer une classe à la sérialisation, appliquez DataContractAttribute à la classe. Pour chaque membre de la classe qui retourne des données que vous souhaitez sérialiser, appliquez le DataMemberAttribute. Vous pouvez sérialiser des champs et des propriétés, quelle que soit l'accessibilité : privés, protégés, internes, internes protégés ou publics.
Par exemple, votre schéma spécifie une Customer propriété avec une ID propriété, mais vous disposez déjà d’une application existante qui utilise un type nommé Person avec une Name propriété. Pour créer un type conforme au contrat, appliquez d’abord la classe DataContractAttribute. Appliquez ensuite la DataMemberAttribute valeur à chaque champ ou propriété que vous souhaitez sérialiser.
Remarque
Vous pouvez appliquer le DataMemberAttribute aux membres privés et publics.
Le format final du code XML n’a pas besoin d’être texte. Au lieu de cela, les DataContractSerializer données sont écrites comme un ensemble d’informations XML, ce qui vous permet d’écrire les données dans n’importe quel format reconnu par le XmlReader et XmlWriter. Il est recommandé d’utiliser les classes XmlDictionaryReader et XmlDictionaryWriter pour lire et écrire, car les deux sont optimisées pour fonctionner avec le DataContractSerializer.
Si vous créez une classe qui a des champs ou des propriétés qui doivent être renseignés avant la sérialisation ou la désérialisation, utilisez des attributs de rappel, comme décrit dans Version-Tolerant rappels de sérialisation.
Ajouter à la collection de types connus
Lors de la sérialisation ou de la désérialisation d’un objet, il est nécessaire que le type soit « connu » à l’objet DataContractSerializer. Commencez par créer une instance d’une classe qui implémente IEnumerable<T> (par exemple List<T>) et ajoutez les types connus à la collection. Créez ensuite une instance de DataContractSerializer en utilisant l'une des surcharges qui acceptent IEnumerable<T> (par exemple, DataContractSerializer(Type, IEnumerable<Type>)).
Remarque
Contrairement aux autres types primitifs, la DateTimeOffset structure n’est pas un type connu par défaut. Elle doit donc être ajoutée manuellement à la liste des types connus (voir Types connus du contrat de données).
Compatibilité vers l’avant
DataContractSerializer comprend les contrats de données qui ont été conçus pour être compatibles avec les futures versions du contrat. Ces types implémentent l’interface IExtensibleDataObject . L’interface comprend la ExtensionData propriété qui retourne un ExtensionDataObject objet. Pour plus d’informations, consultez Forward-Compatible Contrats de données.
Exécuter sous confiance partielle
Lors de l’instanciation de l’objet cible pendant la désérialisation, le DataContractSerializer ne fait pas appel au constructeur de l’objet cible. Si vous créez un type [DataContract] accessible à partir d’une approbation partielle (autrement dit, il est public et dans un assembly auquel l’attribut AllowPartiallyTrustedCallers est appliqué) et qui effectue certaines actions liées à la sécurité, vous devez savoir que le constructeur n’est pas appelé. En particulier, les techniques suivantes ne fonctionnent pas :
- Si vous essayez de restreindre l’accès en confiance partielle en rendant le constructeur interne ou privé, ou en ajoutant un
LinkDemandau constructeur, ni l’un ni l’autre n’ont d’effet pendant la désérialisation en confiance partielle. - Si vous codez la classe qui suppose que le constructeur est exécuté, la classe peut entrer dans un état interne non valide qui est exploitable.