Microsoft a réalisé l'importance des données sérialisées et a donc inclus les espaces de noms System.Runtime.Serialization et System.Xml.Serialization dans le framework .NET pour fournir des fonctions de sérialisation et offrir aux utilisateurs la possibilité d'écrire leurs propres méthodes de sérialisation. . L'espace de noms System.Xml.Serialization fournit des méthodes de base pour sérialiser un objet au format XML. Voyons comment utiliser cette méthode.
Le charme du XML
Le XML sérialisé fait référence au processus de sauvegarde des champs publics et des attributs d'un objet dans un format série (ici, le format XML) pour faciliter le stockage ou la transmission. La désérialisation est le processus d'utilisation des informations d'état série pour restaurer un objet de son état XML série à son état d'origine. Par conséquent, vous pouvez considérer la sérialisation comme une méthode permettant de sauvegarder l’état d’un objet dans un flux ou un tampon.
Le but de la sérialisation est le stockage et la conversion des données. Le stockage des données fait référence à la sauvegarde des données entre les sessions utilisateur. A la fermeture de l'application, les données sont enregistrées (sérialisées) et au retour de l'utilisateur, les données sont rechargées (désérialisées). La conversion de données fait référence à la transformation des données dans un format pouvant être compris par un autre système. Grâce à la sérialisation et au XML, la conversion des données peut être facilement effectuée.
Les données de l'objet peuvent être une classe, une méthode, une propriété, un type privé, un tableau ou même du XML incorporé dans un objet System.Xml.XmlElement ou System.Xml.XmlAttribute.
La classe clé dans l'espace de noms System.Xml.Serialization est XmlSerializer. Bien entendu, cet espace de noms inclut également d'autres classes liées à d'autres aspects de XML et SOAP, mais nous nous concentrons sur la classe XmlSerializer.
XmlSérialiseur
La classe XmlSerializer fournit des méthodes pour sérialiser des objets en fichiers XML et désérialiser des documents XML en objets. Il permet également aux utilisateurs de spécifier comment les objets sont convertis en XML. Vous pouvez transmettre le type d'objet à sérialiser en tant que paramètre au constructeur de classe. Le code C# suivant illustre l'utilisation du constructeur.
XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize));
Voici le code VB.NET équivalent :
Dim ser As New XmlSerializer(GetType(objectToSerialize))
Le processus de sérialisation réel est implémenté dans la méthode Serialize de la classe XmlSerializer. Cette méthode permet d'appeler des objets TextWriter, Stream et XmlWriter lors de la sérialisation. L'exemple de code suivant illustre comment appeler cette méthode. Dans cet exemple, un objet est sérialisé et enregistré dans un fichier sur le disque local. L'exemple commence par la déclaration de classe, suivie du code source sérialisé.
utiliser le système ;
espace de noms BuilderSerialization {
Adresse de classe publique {
Adresse publique() {}
chaîne publique Adresse1 ;
chaîne publique Adresse2 ;
chaîne publique Ville ;
État de chaîne publique ;
chaîne publique Zip ;
chaîne publique Pays ;
} }
utiliser le système ;
espace de noms BuilderSerialization {
classe publique Auteur {
public Auteur() { }
chaîne publique Prénom ;
chaîne publique MiddleName ;
chaîne publique LastName ;
chaîne publique Titre ;
chaîne publique Sexe ;
Adresse publique AddressObject ;
} }
espace de noms BuilderSerialization {
Livre de classe publique {
livre public() { }
chaîne publique Titre ;
public Auteur AuteurObject ;
chaîne publique ISBN ;
prix de détail public double ;
chaîne publique Éditeur ;
}}
utiliser le système ;
en utilisant System.Xml.Serialization ;
en utilisant System.IO ;
espace de noms BuilderSerialization {
classe TestClass {
static void Main(string[] arguments) {
Livre BookObject = new Book();
XmlSerializer ser = new XmlSerializer(typeof(Book));
TextWriterwriter = new StreamWriter("booktest.xml");
BookObject.Title = "LotusScript pratique";
LivreObject.ISBN = "1884777767" ;
BookObject.Publisher = "Publications Manning";
BookObject.RetailPrice = 43,95 ;
BookObject.AuthorObject = new Author();
BookObject.AuthorObject.FirstName = "Tony";
BookObject.AuthorObject.LastName = "Patton";
BookObject.AuthorObject.Gender = "Homme";
BookObject.AuthorObject.AddressObject = new Address();
BookObject.AuthorObject.AddressObject.Address1 = "1 rue principale";
BookObject.AuthorObject.AddressObject.City = "N'importe où";
BookObject.AuthorObject.AddressObject.State = "KY";
BookObject.AuthorObject.AddressObject.Zip = "40000";
BookObject.AuthorObject.AddressObject.Country = "États-Unis" ;
ser.Serialize(écrivain, BookObject);
écrivain.Close();
} } }
Le code ci-dessus transforme trois objets en un seul objet, générant ainsi un fichier XML pendant le processus de sérialisation. Voici le document XML généré par l'exemple de programme :
<?xml version="1.0" encoding="utf-8"?>
<Livre xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">
<Titre>LotusScript pratique</Titre>
<AuteurObjet>
<Premier>Tony</Premier>
<Nom>Patton</Nom>
<Gender>Homme</Gender>
<AdresseObjet>
<Adresse1>1 rue principale</Adresse1>
<Ville>N'importe où</Ville>
<État>KY</État>
<Zip>40000</Zip>
<Pays>États-Unis</Pays>
</AdresseObjet>
</AuteurObjet>
<ISBN>1884777767 </ISBN>
<RetailPrice>43,95</RetailPrice>
<Éditeur>Manning Publications</Éditeur>
</Book>
Notez que le processus de sérialisation peut également gérer l'imbrication des données d'objet. Les données sont converties dans un format reconnaissable, ce qui facilite le rechargement des données (désérialisation) et le transfert de données vers un autre système. Lors du processus de transfert de données, le système récepteur a besoin de connaître le format du fichier XML (s'il ne le connaît pas à l'avance). Par conséquent, un fichier de schéma XML doit être fourni. L'outil XSD.exe du .NET Framework peut générer un fichier de schéma pour le XML sérialisé.
Voici un exemple de code écrit en VB.NET :
Adresse de classe publique
Adresse publique1 sous forme de chaîne
Adresse publique2 sous forme de chaîne
Ville publique comme chaîne
État public sous forme de chaîne
Zip public sous forme de chaîne
Pays public sous forme de chaîne
Fin du cours
Auteur de la classe publique
Prénom public sous forme de chaîne
Deuxième prénom public sous forme de chaîne
Nom public sous forme de chaîne
Titre public sous forme de chaîne
Genre public sous forme de chaîne
Adresse publiqueObjet comme adresse
Fin du cours
Livre de classe publique
Auteur publicObjet en tant qu'auteur
Titre public sous forme de chaîne
ISBN public sous forme de chaîne
Prix de détail public doublé
Éditeur public sous forme de chaîne
Fin du cours
Importe System.Xml.Serialization
ImportationsSystem.IO
ModuleModule1
Sous-principal()
Dim BookObject comme nouveau livre
Dim être comme nouveau XmlSerializer (GetType (Book))
Dim Writer en tant que nouveau StreamWriter("booktest.xml")
Avec BookObject
.Title = "LotusScript pratique"
.ISBN = "1884777767"
.Publisher = "Publications Manning"
.RetailPrice = 43,95
.AuthorObject = Nouvel auteur
.AuthorObject.FirstName = "Tony"
.AuthorObject.LastName = "Patton"
.AuthorObject.Gender = "Homme"
.AuthorObject.AddressObject = Nouvelle adresse
.AuthorObject.AddressObject.Address1 = "1 rue principale"
.AuthorObject.AddressObject.City = "N'importe où"
.AuthorObject.AddressObject.State = "KY"
.AuthorObject.AddressObject.Zip = "40000"
.AuthorObject.AddressObject.Country = "États-Unis"
Terminer par
ser.Serialize (écrivain, BookObject)
écrivain.Fermer()
Fin du sous-marin
de contrôle
du module
d'extrémité
Le processus de sérialisation génère des fichiers XML standard et les données membres sont converties en éléments XML. Toutefois, toutes les données membres ne deviennent pas des éléments. Vous pouvez contrôler le fichier XML de sortie en ajoutant des balises dans le code de classe. De cette façon, les données membres peuvent être converties en attributs XML plutôt qu'en éléments, ou simplement ignorées. L'exemple suivant est un code VB.NET de classe de livre modifié.
Livre de classe publique
Auteur publicObjet en tant qu'auteur
Titre public sous forme de chaîne
<System.Xml.Serialization.XmlAttribute()> _
ISBN public sous forme de chaîne
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Prix de détail public doublé
Éditeur public sous forme de chaîne
End Class
Ce code indique au système d'utiliser le membre de classe ISBN comme attribut XML lors de la génération du fichier XML et d'ignorer le membre RetailPrice. Ce changement est visible dans le fichier XML généré :
<?xml version="1.0" encoding="utf-8"?>
<Livre xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " ISBN="1884777767 ">
<AuteurObjet>
<Premier>Tony</Premier>
<Nom>Patton</Nom>
<Gender>Homme</Gender>
<AdresseObjet>
<Adresse1>1 rue principale</Adresse1>
<Ville>N'importe où</Ville>
<État>KY</État>
<Zip>40000</Zip>
<Pays>États-Unis</Pays>
</AdresseObjet>
</AuteurObjet>
<Titre>LotusScript pratique</Titre>
<Éditeur>Manning Publications</Éditeur>
</Book>
Voici le code C# correspondant :
public class Book {
livre public() { }
chaîne publique Titre ;
public Auteur AuteurObject ;
[System.Xml.Serialization.XmlAttribute()]
chaîne publique ISBN ;
[System.Xml.Serialization.XmlIgnoreAttribute()]
prix de détail public double ;
chaîne publique Éditeur ;
}
Ce qui précède ne mentionne que brièvement deux symboles de marquage. Veuillez consulter la documentation .NET pour la notation de balisage complète.
La désérialisation des données désérialisées peut être facilement réalisée en appelant la méthode Deserialize de la classe XmlSerializer. Le fragment de programme VB.NET suivant termine la désérialisation du document XML mentionné ci-dessus :
Dim BookObject As New Book
Dim être comme nouveau XmlSerializer (GetType (Book))
Dim fs comme nouveau System.IO.FileStream("booktest.xml", FileMode.Open)
Lecteur Dim en tant que nouveau System.XML.XmlTextReader(fs)
BookObject = CType(ser.Deserialize(reader), Book)
Ce programme met les données de résultat en mémoire pour une utilisation ultérieure. Voici le code C# équivalent :
XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStreamfs = nouveau System.IO.FileStream("booktest.xml",
FileMode.Open);
Lecteur System.Xml.XmlTextReader = new System.Xml.XmlTextReader(fs);
Livre BookObject = (Livre)(ser.Deserialize(reader));
-------------------------------------------------- -
À propos de l'auteur : Tony Patton est un développeur d'applications professionnel possédant des connaissances approfondies et est certifié en Java, VB, Lotus et XML.