27
2010
Tutoriel sur la sérialisation en C# – Partie 1
Pré requis :
Visual studio c# (Express ou autres édition)
.net Framework
Développement :
Nous allons commencer par développer un simple carnet d’adresses, dans lequel on pourra ajouter des personnes, ainsi que sauvegarder et charger le carnet d’adresse par le biais de la sérialisation, une façon rapide et facile de travailler la translation entre les objets et les fichiers.
Commençons tout d’abord par créer le projet comme ce qui suis
Fichier / Nouveau / Projet
Nous allons rajouter plusieurs contrôles à notre fenêtre actuellement nommée Form1
Liste des composants sur la form
| Contrôle | Nom |
| Listview | listViewCarnet |
| Button | ButtonAjouter |
| Button | ButtonCharger |

Mettre la listview au format Détails, et cliquez sur Editer les colonnes.
On crée trois colonnes une pour le nom une pour le prénom et pour finir une pour le téléphone.
Voilà nous avons désormais une interface pour visionner nos enregistrements, continuons par ajouter une nouvelle form au projet que nous nommerons FormAdresse permettant d’alimenter notre carnet.
Pour faire ceci faire clic droit sur le projet / ajouter / Winform control
Une fois la form construite elle devrais ressembler à ceci
Dans les propriétés de la form spécifiez dans la catégorie Misc(Autres) le bouton accepter et annuler de la form.
Dans les propriétés du buttonAjouter dans le champ DialogResult mettez la propriétés a “OK”.
Méthode pour le bouton annuler (Double cliquez sur le bouton annuler pour l’auto généré)
private void buttonAnnuler_Click(object sender, EventArgs e)
{
Close();
}
Rajoutez le Close(); pour permettre de fermer la form, sans conserver les données entrées par l’utilisateur.
On fait exactement la même chose pour le bouton Ajouter
private void buttonAjouter_Click(object sender, EventArgs e)
{
Close();
}
Revenons sur la form principale (Form1) et double cliquez sur le bouton ajouter
private void buttonAjouter_Click(object sender, EventArgs e)
{
FormAdresse formAdresse = new FormAdresse();
if (formAdresse.ShowDialog() == DialogResult.OK)
{
// TODO : Traitement du retour
}
}
On rajoute le code suivant qui permettra d’ouvrir la nouvelle form de façon modal (obligation de fermer la form d’ajout d’adresse pour revenir à celle principale).
Créons maintenant une classe Adresse permettant de stocker les variables pour l’adresse d’une personne.
Clic droit sur le projet / Ajouter / Classe
Remplissez la comme ce qui suis
using System;
namespace TutoCarnet
{
public class Adresse
{
string nom;
string prenom;
string telephone;
public string Nom
{
get { return nom; }
set { nom = value; }
}
public string Prenom
{
get { return prenom; }
set { prenom = value; }
}
public string Telephone
{
get { return telephone; }
set { telephone = value; }
}
public Adresse()
{
}
}
}
Tips :
Lorsque vous créé une variable faite un CTRL + R + E dessus ce qui activera le refractoring et ajoutera automatiquement les Get et Set (Fonction non disponible sur Visual C# Express)
Nous allons créer notre classe Carnet comme ce qui suis
using System;
using System.Collections.Generic;
namespace TutoCarnet
{
public class Carnet
{
List<Adresse> listeAdresses;
public List<Adresse> ListeAdresses
{
get { return listeAdresses; }
set { listeAdresses = value; }
}
public Carnet()
{
listeAdresses = new List<Adresse>();
}
}
}
Nous allons créer notre carnet au sein de la première form (Form1)
public partial class Form1 : Form
{
Carnet carnetAdresses;
public Form1()
{
InitializeComponent();
carnetAdresses = new Carnet();
}
Puis dans le constructeur de la FormAdresse nous allons rajouter un paramètre pour ajouter une adresse
public partial class FormAdresse : Form
{
Adresse adresse;
public FormAdresse(Adresse uneAdresse)
{
InitializeComponent();
this.adresse = uneAdresse;
}
private void buttonAnnuler_Click(object sender, EventArgs e)
{
Close();
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
adresse.Nom = textBoxNom.Text;
adresse.Prenom = textBoxPrenom.Text;
adresse.Telephone = textBoxTel.Text;
Close();
}
}
Voici le code après modification, n’oublions pas de passer le nouveau paramètre dans l’appel de la form
private void buttonAjouter_Click(object sender, EventArgs e)
{
Adresse nouvelleAdresse = new Adresse();
FormAdresse formAdresse = new FormAdresse(nouvelleAdresse);
if (formAdresse.ShowDialog() == DialogResult.OK)
{
carnetAdresses.ListeAdresses.Add(nouvelleAdresse);
RemplirListe();
}
}
Et une méthode RemplirListe permettant de mettre à jour la listview
private void RemplirListe()
{
listViewCarnet.Items.Clear();
foreach (Adresse adresse in carnetAdresses.ListeAdresses)
{
ListViewItem item = new ListViewItem();
item.Text = adresse.Nom;
item.SubItems.Add(adresse.Prenom);
item.SubItems.Add(adresse.Telephone);
listViewCarnet.Items.Add(item);
}
}
Ce qui nous donne les enregistrements dans la listview
La partie la plus important de notre tutorial arrive désormais \o/ la sérialisation.
On va modifier le classe Carnet et la classe Adresse pour permettre au serializer de faire son travail correctement.
using System.IO; using System.Xml.Serialization;
On rajoute ces deux directives dans la classe Carnet
using System.Xml.Serialization;
Et cette directive dans la classe Adresse
Puis dans la classe carnet et adresse rajouté l’attribut [Serializable]
[Serializable] public class Carnet
[Serializable] public class Adresse
Attention pour qu’un objet soit sérialisable il faut absolument un constructeur sans paramètres.
On va rajouter deux méthodes dans la classe carnet permettant de charger et de sauvegarder celui-ci
public void Sauvegarder(string filename)
{
FileStream file = File.Open(filename, FileMode.OpenOrCreate);
XmlSerializer serializer = new XmlSerializer(typeof(Carnet));
serializer.Serialize(file, this);
file.Close();
}
On ouvre le fichier et on le stock dans un FileStream, puis on déclare l’xmlserializer en lui passant en paramètre l’objet que l’on veut sérialiser (typeof(Carnet)), ensuite execute la méthode serialize qui va stocker les données directement dans le fichier enfin on ferme le fichier (A ne surtout pas oublier).
public Carnet Charger(string filename)
{
FileStream file = File.Open(filename, FileMode.Open);
XmlSerializer serializer = new XmlSerializer(typeof(Carnet));
Carnet unCarnet = (Carnet)serializer.Deserialize(file);
file.Close();
return unCarnet;
}
Même chose que précédement sauf que l’on utilise la méthode Deserialize de l’objet serializer pour retourner notre nouveau carnet.
Revenons à notre form principale et rajoutez un bouton sauvegarder.
private void buttonSauvegarder_Click(object sender, EventArgs e)
{
SaveFileDialog boiteSauvegarde = new SaveFileDialog();
boiteSauvegarde.Filter = "Fichier xml(*.xml)|*.xml";
if (boiteSauvegarde.ShowDialog() == DialogResult.OK)
{
carnetAdresses.Sauvegarder(boiteSauvegarde.FileName);
}
}
On ouvre une boite de dialogue permettant de choisir l’emplacement de la sauvegarde, on filtre uniquement les fichiers XML et on appel la méthode sauvegarder avec le nom du fichier choisit.
private void buttonCharger_Click(object sender, EventArgs e)
{
OpenFileDialog boiteOuverture = new OpenFileDialog();
boiteOuverture.Filter = "Fichier xml(*.xml)|*.xml";
if (boiteOuverture.ShowDialog() == DialogResult.OK)
{
carnetAdresses = carnetAdresses.Charger(boiteOuverture.FileName);
RemplirListe();
}
}
On retrouve casiment le même code que pour la méthode de sauvegarde sauf que dans celle-ci on applique la méthode charger qui retournera un objet de type carnet que nous réapliquerons sur notre carnet courant et on exécutera la méthode remplir liste pour afficher nos informations.
C’est magique tout fonctionne on peut créer un carnet et l’afficher ainsi que le sauvegarder et le charger.
Le fichier xml contiendra les données suivantes
<?xml version="1.0"?> <Carnet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ListeAdresses> <Adresse> <Nom>titi</Nom> <Prenom>toto</Prenom> <Telephone>0606060606</Telephone> </Adresse> <Adresse> <Nom>blabla</Nom> <Prenom>jean</Prenom> <Telephone>0505050505</Telephone> </Adresse> </ListeAdresses> </Carnet>
Un bon moyen de sauvegarder et charger les données pour tout type de projet sans s’embêter.
Source du projet
Articles relatifs
Survie
Catégories
- Andengine (5)
- Android (20)
- Application (1)
- Articles (1)
- Non classé (2)
- Programmation (30)
Nuage
Commentaires récents
- Paumé dans [Tutoriel Honeycomb] Partie 1 – Les actions bars
- Acesyde dans [Tutoriel android] Partie 3 – Une petite intention ?
- paul dans [Tutoriel Honeycomb] Partie 1 – Les actions bars
- Sne dans [Tutoriel android] Partie 3 – Une petite intention ?
- Vivien-57 dans [Tutoriel Android] Partie 13 – L’appareil photo
Archives
- janvier 2012 (2)
- novembre 2011 (1)
- octobre 2011 (3)
- juillet 2011 (3)
- juin 2011 (1)
- décembre 2010 (4)
- octobre 2010 (3)
- septembre 2010 (5)
- juillet 2010 (8)
- avril 2010 (6)

Un article de










Pingback: Tutorial sur la sérialisation en C# – Partie 2
Pingback: TUTORIEL .NET REMOTING