Concepts de base de la sérialisation .NET Framework

Mise à jour : novembre 2007

La sérialisation est le processus de conversion d'un objet en un flux d'octets afin de le faire persister dans la mémoire, dans une base de données ou dans un fichier. Son objectif principal est d'enregistrer l'état d'un objet pour pouvoir le recréer si nécessaire. Le processus inverse est appelé désérialisation.

Fonctionnement de la sérialisation

Cette illustration affiche le processus global de la sérialisation.

Graphique Sérialisation

L'objet est sérialisé à un flux qui contient non seulement les données, mais également des informations sur le type d'objet, notamment sa version, sa culture et son nom d'assembly. À partir de ce flux, il peut être stocké dans une base de données, dans un fichier ou en mémoire.

Utilisations de la sérialisation

La sérialisation permet au développeur d'enregistrer l'état d'un objet et de le recréer si nécessaire, en fournissant un stockage d'objets ainsi qu'un échange de données. Par le biais de la sérialisation, un développeur peut effectuer des actions comme l'envoi de l'objet à une application distante via un service Web, le passage d'un objet d'un domaine à un autre, via un pare-feu sous forme de chaîne XML ou la conservation des informations de sécurité ou spécifiques à l'utilisateur sur les applications.

Rendre un objet sérialisable

Pour sérialiser un objet, vous devez disposer des éléments suivants : l'objet à sérialiser, un flux pour contenir l'objet sérialisé et un Formatter. System.Runtime.Serialization contient les classes nécessaires pour la sérialisation et la désérialisation des objets.

Appliquez l'attribut SerializableAttribute à un type pour indiquer que ses instances peuvent être sérialisées. Une exception SerializationException est levée si vous essayez d'effectuer la sérialisation et que le type n'a pas l'attribut SerializableAttribute.

Si vous ne souhaitez pas qu'un champ de votre classe soit sérialisable, appliquez l'attribut NonSerializedAttribute. Si un champ d'un type sérialisable contient un pointeur, un handle ou une autre structure de données spécifique à un environnement particulier et ne peut pas être reconstitué de manière significative dans un autre environnement, il est possible de le rendre non sérialisable.

Si une classe sérialisée contient des références aux objets d'autres classes qui sont marquées SerializableAttribute, ces objets seront également sérialisés.

Sérialisation binaire et XML

La sérialisation binaire ou XML peut être utilisée. Dans une sérialisation binaire, tous les membres, même ceux qui sont en lecture seule, sont sérialisés et les performances sont améliorées. La sérialisation XML fournit un code plus lisible, ainsi qu'une plus grande souplesse du partage et de l'utilisation des objets pour des raisons d'interopérabilité.

Sérialisation binaire

La sérialisation binaire utilise le codage binaire afin de produire une sérialisation compacte destinée notamment au stockage ou au flux réseau socket. Il n'est pas convenable de faire passer les données dans un pare-feu mais les performances sont meilleures lors du stockage des données.

Sérialisation XML

La sérialisation XML sérialise les champs et les propriétés publics d'un objet, ou les paramètres et valeurs de retour des méthodes, en un flux XML conforme à un document de langage XSD (XML Schema Definition) spécifique. La sérialisation XML favorise des classes fortement typées avec des propriétés et des champs publics convertis en XML. System.Xml.Serialization contient les classes nécessaires pour la sérialisation et la désérialisation XML.

Vous pouvez appliquer les attributs à des classes et à des membres de classe pour contrôler la manière dont XmlSerializer sérialise ou désérialise une instance de la classe. Pour plus d'informations, consultez Contrôle de la sérialisation XML à l'aide d'attributs et Attributs qui contrôlent la sérialisation XML.

Ce tableau répertorie des tâches associées à la sérialisation XML :

Pour

Reportez-vous à

Sérialiser un objet

Comment : sérialiser un objet

Désérialiser un objet

Comment : désérialiser un objet

Générer des classes et une documentation du schéma XML

Comment : utiliser l'outil XML Schema Definition pour générer des classes et des documents de schéma XML

Qualifier un élément XML et des noms d'attribut XML

Comment : qualifier des noms d'éléments XML et des noms d'attributs XML

Spécifier un nom d'élément différent pour un flux XML

Comment : spécifier un nom d'élément différent pour un flux XML

Contrôler la sérialisation des classes dérivées

Comment : contrôler la sérialisation de classes dérivées

Sérialisation SOAP

La sérialisation XML peut également être utilisée pour sérialiser des objets en flux XML se conformant à la spécification SOAP. SOAP est un protocole basé sur XML, conçu spécifiquement pour transporter des appels de procédure à l'aide de XML. Comme avec la sérialisation XML, les attributs peuvent également être utilisés pour contrôler les messages SOAP de style littéral générés par un service Web XML. Pour plus d'informations, consultez Sérialisation XML avec les services Web XML et Attributs qui contrôlent la sérialisation codée selon le protocole SOAP.

Ce tableau répertorie les tâches associées à la sérialisation XML codée en SOAP :

Pour

Reportez-vous à

Sérialiser un objet en tant que flux XML codé en SOAP

Comment : sérialiser un objet en tant que flux XML codé selon le protocole SOAP

Substituer la sérialisation XML codée en SOAP

Comment : substituer la sérialisation XML codée selon le protocole SOAP

Sérialisation de base et personnalisée

La sérialisation peut être effectuée de deux manières, de base ou personnalisée. La sérialisation de base utilise le .NET Framework pour sérialiser automatiquement l'objet.

Sérialisation de base

La seule condition de la sérialisation de base est que l'attribut SerializableAttribute soit appliqué à l'objet. L'NonSerializedAttribute peut être utilisé pour empêcher que des champs spécifiques ne soient sérialisés.

Lorsque vous utilisez la sérialisation de base, le versioning des objets peut causer des problèmes, auquel cas la sérialisation personnalisée peut être préférable. La sérialisation de base constitue le moyen le plus facile pour effectuer la sérialisation, mais ne permet pas un contrôle efficace sur le processus.

Sérialisation personnalisée

Dans la sérialisation personnalisée, vous pouvez spécifier exactement les objets à sérialiser et le mode de déroulement du processus. La classe doit être marquée SerializableAttribute et implémenter l'interface ISerializable.

Si vous souhaitez que votre objet soit également désérialisé de manière personnalisée, vous devez utiliser un constructeur personnalisé.

Sérialisation du concepteur

La sérialisation du concepteur est une forme de sérialisation spéciale qui implique le type de persistance des objets généralement associé aux outils de développement. La sérialisation du concepteur est le processus de conversion d'un graphique d'objets en un fichier source qui peut être utilisé ultérieurement pour récupérer le graphique d'objets. Un fichier source peut contenir du code, un balisage ou même des informations sur les tables SQL. Pour plus d'informations, consultez Vue d'ensemble de la sérialisation du concepteur.

Voir aussi

Tâches

Comment : segmenter des données sérialisées

Concepts

Exemples de sérialisation XML

Classes utilisées dans la sérialisation .NET Framework