Sérialisation (Visual Basic)

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

Fonctionnement de la sérialisation

Cette illustration montre le processus global de sérialisation.

Graphique sérialisation

L’objet est sérialisé en un flux, qui contient non seulement les données, mais aussi des informations sur le type de l’objet, telles que 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.

Usages 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 le stockage d’objets, ainsi que l’échange de données. Avec la sérialisation, un développeur peut effectuer des actions comme envoyer l’objet à une application distante au moyen d’un service web, le transmettre d’un domaine à un autre, le transmettre à travers un pare-feu sous forme de chaîne XML ou maintenir la sécurité ou des informations propres à l’utilisateur entre les applications.

Rendre un objet sérialisable

Pour sérialiser un objet, il vous faut l’objet à sérialiser, un flux qui contiendra l’objet sérialisé et Formatter. System.Runtime.Serialization contient les classes nécessaires pour sérialiser et désérialiser des objets.

Appliquez l’attribut SerializableAttribute à un type pour indiquer que les instances de ce type peuvent être sérialisées. Une exception SerializationException est levée si vous tentez de sérialiser alors que le type n’a pas l’attribut SerializableAttribute.

Si vous ne voulez 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 propre à un environnement particulier et qu’il n’est pas possible de le reconstituer de manière significative dans un autre environnement, vous pouvez le rendre non sérialisable.

Si une classe sérialisée contient des références à des objets d’autres classes marqués par SerializableAttribute, ces objets seront également sérialisés.

Sérialisation binaire et XML

Il est possible d’utiliser soit la sérialisation binaire soit la sérialisation XML. Dans la sérialisation binaire, tous les membres, y compris 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 de partage et d’utilisation de l’objet à des fins d’interopérabilité.

Sérialisation binaire

La sérialisation binaire utilise l’encodage binaire pour produire une sérialisation compacte qui peut servir notamment aux flux réseau par socket ou stockage.

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 renvoyés de méthodes, en un flux XML conforme à un document XSD (langage de définition de schéma XML) spécifique. La sérialisation XML permet d’obtenir des classes fortement typées avec des propriétés et des champs publics convertis au format XML. System.Xml.Serialization contient les classes nécessaires pour sérialiser et désérialiser du code XML.

Vous pouvez appliquer des attributs à des classes et des membres de classes afin de contrôler la manière dont XmlSerializer sérialise ou désérialise une instance de la classe.

Sérialisation de base et sérialisation personnalisée

La sérialisation peut s’effectuer de deux manières : de base et personnalisée. La sérialisation de base utilise .NET Framework pour sérialiser automatiquement l’objet.

Sérialisation de base

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

Lorsque vous utilisez la sérialisation de base, la gestion des versions des objets peut poser problème, auquel cas la sérialisation personnalisée peut être préférable. La sérialisation de base est le moyen le plus simple d’effectuer la sérialisation, mais elle ne fournit pas beaucoup de contrôle sur le processus.

Sérialisation personnalisée

Dans la sérialisation personnalisée, vous pouvez spécifier exactement quels objets sont sérialisés et de quelle façon. 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 particulière de sérialisation qui implique le type de persistance d’objets généralement associé aux outils de développement. La sérialisation du concepteur est le processus qui consiste à convertir un graphique d’objet en un fichier source utilisable ultérieurement pour récupérer le graphique d’objet. Un fichier source peut contenir du code, des balises ou même des tables SQL.

Rubriques connexes et exemples

Procédure pas à pas : persistance d’un objet dans Visual Studio (Visual Basic)
Montre comment utiliser la sérialisation pour rendre les données d’un objet persistantes entre les instances, afin de stocker des valeurs et de les récupérer lors de la prochaine instanciation de l’objet.

Guide pratique : lire des données d’objet à partir d’un fichier XML (Visual Basic)
Montre comment lire les données d’objet écrites précédemment dans un fichier XML en utilisant la classe XmlSerializer.

Guide pratique : écrire des données d’objet dans un fichier XML (Visual Basic)
Montre comment écrire l’objet depuis une classe vers un fichier XML en utilisant la classe XmlSerializer.