1- Exemple (ne pas oublier using à System.IO et using System.Xml.Serialization, ainsi que les éventuelles références)
Exemple Une classe static permettant de sérializer et déserializer une liste de contacts
internal static class Serializer { public static void Serialize(string fileName, Contacts contacts) { XmlSerializer serializer = new XmlSerializer(typeof(Contacts)); using (StreamWriter writer = new StreamWriter(fileName)) { serializer.Serialize(writer, contacts); } }
public static Contacts Deserialize(string fileName) { XmlSerializer serializer = new XmlSerializer(typeof(Contacts)); Contacts contacts; using (StreamReader reader = new StreamReader(fileName)) { contacts = (Contacts)serializer.Deserialize(reader); }
return contacts; } } |
MainForm.cs
J’utilise dans l’exemple un bindingSource (+ bindingNavigator)
bindingSource1.DataSource = Serializer.Deserialize(fileName);
Serializer.Serialize(fileName, (Contacts)bindingSource1.DataSource); |
2 – Sérialzation Xml générique
internal static class Serializer { public static void Serialize<T>(string fileName, T obj) { XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StreamWriter writer = new StreamWriter(fileName)) { serializer.Serialize(writer, obj); } }
public static T Deserialize<T>(string fileName) { XmlSerializer serializer = new XmlSerializer(typeof(T)); T obj; using (StreamReader reader = new StreamReader(fileName)) { obj = (T)serializer.Deserialize(reader); } return obj; }
}
|
Exemple de fichier xml généré
<?xml version="1.0" encoding="utf-8"?> <ArrayOfContact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Contact> <contactId>1</contactId> <contactName>dupond</contactName> <contactFirstName>paul</contactFirstName> <purchase>10</purchase> </Contact> <Contact> <contactId>2</contactId> <contactName>durand </contactName> <contactFirstName>marc</contactFirstName> <purchase>15</purchase> </Contact> </ArrayOfContact> |
MainForm.cs
bindingSource1.DataSource = Serializer.Deserialize<Contacts>(fileName);
Serializer.Serialize<Contacts>(fileName,(Contacts) bindingSource1.DataSource); |
3 -Attributs de controle
Astuce : ne pas oublier using System.Xml.Serialization;
XmlIgnore permet de ne pas sérializer ce membre
XmlElement permet de changer le nom de la balise générée
Exemple balise achat à la place de purchase
[XmlElement("Achat")] public int purchase { get { return _purchase; } set { _purchase = value; } } |
|
<Achat>0</Achat> |
XmlRoot change le nom pour la classe
XmlAttribute la propriété sera générée sous forme d’attribut
[XmlAttribute("id")] public int contactId { get { return _contactId; } set { _contactId = value; } } |
<Contact id="0"> |
Etc.
http://tlevesque.developpez.com/dotnet/xml-serialization/#LII