L'origine de ton problème est que dans ta classe contactCollection, la seule propriété publique est contacts, et elle est en lecture seule : elle ne sera donc pas sérialisée. Seules les propriétés en lecture/écriture sont sérialisées.
Autres remarques :
- Comme l'a dit olibara, évite d'utiliser une ArrayList pour stocker des données typées : la classe générique List<T> est beaucoup plus adaptée.
- Ta classe contactCollection ne sert pas à grand chose, tu pourrais directement utiliser une List<contact>. Par contre, par défaut l'élément racine sera "<ArrayOfcontact>" et non pas "<contactCollection>" ; pour y remédier, tu peux utiliser le constructeur de XmlSerializer qui prend en paramètre un XmlRootAttribute :
XmlSerializer xs = new XmlSerializer(typeof(List<contact>), new XmlRootAttribute("contactCollection"));
- L'attribut Serializable ne sert à rien pour la sérialisation XML, c'est juste pour la sérialisation avec BinaryFormatter
- Evite de déclarer des champs publics dans tes classes, crée plutôt des propriétés. C'est particulièrement important si la classe fait partie d'une librairie utilisée par d'autre programmes : par exemple, si un jour tu veux implémenter une notification de changement quand un champ est modifié, tu seras obligé de changer ce champ en propriété, et les programmes qui utilisent la classe ne fonctionneront plus car l'interface de la classe aura changé. Si tu n'exposes que des propriétés, le problème ne se pose plus, car tu peux changer l'implémentation privée sans modifier l'interface publique
Pour plus d'infos sur la sérialisation XML, tu peux regarder ces tutos :
http://tlevesque.developpez.com/dotn...serialization/
http://tlevesque.developpez.com/dotn...rialization-2/
Partager