Bonsoir,

Je travaille actuellement sur un projet pour mes cours : je développe un Kamisado en C# avec des Winforms.

J'essaye de créer un système de sauvegarde / chargement en utilisant XmlSerializer mais je bloque sur un problème : j'arrive bien à créer un fichier XML mais certaines balises, qui devraient contenir des infos, sont auto-fermées.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<Donnees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <boardgame />
  <j1 />
  <j2 />
  <histoCoups>Quistis (Noir) a déplacé la tour Rouge sur case Marron
Linoa (Blanc) a déplacé la tour Marron sur case Bleue
Quistis (Noir) a déplacé la tour Bleue sur case Marron
</histoCoups>
</Donnees>
La seule chose qui est bien sauvée est l'historique des coups, qui est un String que je récupère de ma classe Partie().
Je ne comprends pas vraiment ce comportement ...

Voici ma classe Sauvegarde() :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Windows.Forms;
 
namespace kamisado
{
	public class Sauvegarde
	{
    	static void Main(string[] args, Partie p)
    	{
        	sauver(p);
    	}
 
    	public class Donnees
    	{
        	public Plateau boardgame;
        	public Joueur j1;
        	public Joueur j2;
        	public String histoCoups;
    	}
 
    	public static void sauver(Partie p)
    	{
        	DialogResult reponse = new DialogResult();
        	reponse = MessageBox.Show("Voulez-vous sauvegarder la partie ?"+ Environment.NewLine +"(cela effacera toute sauvegarde plus ancienne)", "Sauvegarde", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
 
        	if (reponse == DialogResult.Yes)
        	{
            	Donnees enCours = new Donnees();
            	enCours.boardgame = p.getPlateau();
            	enCours.j1 = new Joueur();
            	{
                	enCours.j1.setNom(Accueil.J1.getNom());
                	enCours.j1.setCouleurPions(0);
                	enCours.j1.savePoints(Accueil.J1);
                	enCours.j1.saveTimer(Accueil.J1);
            	}
            	enCours.j2 = Accueil.J2;
            	enCours.histoCoups = p.getHistoCoups();
 
            	XmlSerializer serializer = new XmlSerializer(typeof(Donnees));
 
            	var chemin = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\kamisado_save.xml";
            	System.IO.FileStream fichier = System.IO.File.Create(chemin);
 
            	serializer.Serialize(fichier, enCours);
            	fichier.Close();
 
            	MessageBox.Show("Partie sauvegardée", "Information", MessageBoxButtons.OK,MessageBoxIcon.Information);
        	}
    	}
	}
}
Voici Joueur() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace kamisado
{
	public class Joueur
	{
    	private String nom;
    	private int couleurPions; // 0 pour noir, 1 pour blanc
    	private int compteurPoints;
    	private int timer;
 
    	public Joueur()
    	{
        	// constructeur vide, sert à la classe Sauvegarde
    	}
 
    	public Joueur(String s, int n, int t)
    	{
        	this.nom = s;
        	this.couleurPions = n;
        	this.timer = t*60;
        	this.compteurPoints = 0;
    	}
 
    	public String getNom()
    	{
        	return this.nom;
    	}
 
    	public void setNom(String n)
    	{
        	this.nom = n;
    	}
 
    	public int getCouleurPions()
    	{
        	return this.couleurPions;
    	}
 
    	public void setCouleurPions(int c)
    	{
        	this.couleurPions = c;
    	}
 
    	public int getPoints()
    	{
        	return this.compteurPoints;
    	}
 
    	public void setPoints()
    	{
        	this.compteurPoints++;
    	}
 
    	public void savePoints(Joueur j)
    	{
        	this.compteurPoints = j.getPoints();
    	}
 
    	public int getTime()
    	{
        	return this.timer;
    	}
 
    	public void setTime()
    	{
        	this.timer--;
    	}
 
    	public void saveTimer(Joueur j)
    	{
        	this.timer = j.getTime();
    	}
	}
}
Si besoin, je peux mettre le code de Partie() mais il est assez long et je suppose que le problème est le même que celui qui concerne Joueur().

Merci d'avance pour votre aide