Comment désérialiser un document XML
Source : Stack Overflow
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>