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.
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 |
|
Désérialiser un objet |
|
Générer des classes et une documentation du 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 |
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