Comment désérialiser un document XML

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Comment désérialiser un document XML

Message par ForumBot »

Comment désérialiser un document XML

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Comment désérialiser un document XML

Message par ayi »

Voici une version fonctionnelle. J’ai changé les labels XmlElementAttribute en XmlElement car dans le XML, les valeurs StockNumber, Make et Model sont des éléments, pas des attributs. J’ai également supprimé le reader.ReadToEnd(); (cette fonction lit le flux entier et renvoie une chaîne, donc la fonction Deserialize() ne pouvait plus utiliser le lecteur… la position était à la fin du flux). J’ai aussi pris quelques libertés avec le nommage :).


Voici les classes :


[Serializable()]
public class Car
{
[System.Xml.Serialization.XmlElement("StockNumber")]
public string StockNumber { get; set; }

[System.Xml.Serialization.XmlElement("Make")]
public string Make { get; set; }

[System.Xml.Serialization.XmlElement("Model")]
public string Model { get; set; }
}

[Serializable()]
[System.Xml.Serialization.XmlRoot("CarCollection")]
public class CarCollection
{
[XmlArray("Cars")]
[XmlArrayItem("Car", typeof(Car))]
public Car[] Car { get; set; }
}


La fonction de désérialisation :


CarCollection cars = null;
string path = "cars.xml";

XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));

StreamReader reader = new StreamReader(path);
cars = (CarCollection)serializer.Deserialize(reader);
reader.Close();


Et le XML légèrement modifié (j’ai dû ajouter un nouvel élément pour envelopper … .NET est pointilleux sur la désérialisation des tableaux) :


<?xml version="1.0" encoding="utf-8"?>
<CarCollection>
<Cars>
<Car>
<StockNumber>1020</StockNumber>
<Make>Nissan</Make>
<Model>Sentra</Model>
</Car>
<Car>
<StockNumber>1010</StockNumber>
<Make>Toyota</Make>
<Model>Corolla</Model>
</Car>
<Car>
<StockNumber>1111</StockNumber>
<Make>Honda</Make>
<Model>Accord</Model>
</Car>
</Cars>
</CarCollection>

Répondre

Revenir à « .NET & C# »