XML serializer

Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
- - Dernière réponse : LUDINSKI
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
- 14 avril 2011 à 10:47
Bonjour,

j'ai déjà utilisé cette fonction dans un autre programme et cela marchait très bien mais pas dans mon nouveau programme et je ne comprends pas pourquoi.

J'ai une application de gestion de stats d'un match de tennis. J'ai donc une mainform qui crée un match (classe). Cette classe match contient un tableau de classes Set et chaque set contient un tableau de classe jeu et chaque jeu un tableau de coup.

Dans ma mainform je tente d'utiliser:
XmlSerializer MySerializer = new XmlSerializer(typeof(Match));
StreamWriter MyWriter = new StreamWriter("toto.xml");

MySerializer.Serialize(MyWriter, match);
MyWriter.Close();


mais une fois que j'ouvre mon toto.xml je n'ai que très peu d'info de mon match et aucune de mes set/jeu/coup...

J'ai tenté en désespoir de cause de mettre des [Serializable] dans chaque classe (set,jeu,coup) mais rien n'y fait...

Y'a surement un truc gros comme une maison que je n'ai pas compris...

Merci de votre aide.

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Afficher la suite 

7 réponses

Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
0
Merci
Salut,

Je me trompe peut être, mais ne faudrait-il pas mettre l'attribut [Serializable] au dessus de tes variables à sérialiser ?

soit :
[Serializable]
public class Match
{
    [Serializable]
    public List<Set> Sets;
}


Ca donne quoi ?
Commenter la réponse de LUDINSKI
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
0
Merci
Non excuses-moi je t'ai dit n'importe quoi !
En fait il ne sérialise que les champs est propriétés PUBLIC

Est-ce que tes listes sont déclaré en private ??
Commenter la réponse de LUDINSKI
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
0
Merci
Autre chose... il n'arrive pas à sérialiser un tableau ou un objet List<...>
Il faut lui indiquer comment de la manière suivante :

[Serializable]
public class Match
{
    [XmlIgnore]
    public List<Set> Sets;

    [XmlElement( "Sets" )]
    private string xmlSets
    {
        get
        {
            string xmlValue = "";
            foreach( Set set in Sets )
                xmlValue += set.Name + "|";

            return xmlValue;
        }
        set
        {
            Sets = new List<Set>();
            foreach( string setName in value.Split( '|' ) )
            {
                if( setName.Length > 0 )
                    Sets.Add( new Set( setName ) );
            }
        }
    }

    public Match()
    {
        Sets = new List<Set>();
    }
}

public class Set
{
    public readonly string Name;

    public Set( string name )
    {
        Name = name;
    }
}
Commenter la réponse de LUDINSKI
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
0
Merci
Merci pour tes réponses!!!!

En fait il ne sérialise que les champs est propriétés PUBLIC

Est-ce que tes listes sont déclaré en private ??

Je ne pense pas que ce soit vrai car en fait dans mon xml je ne retrouve que 2 infos (le nom de chaque joueur) et celles-ci sont aussi en private.

Autre chose... il n'arrive pas à sérialiser un tableau

J'avais dans un précédent projet serializé des Arraylist, est-ce différent d'un tableau pour C#???

XmlSerializer MySerializer = new XmlSerializer(typeof(ArrayList), new Type[] { typeof(Component) });
StreamWriter MyWriter = new StreamWriter("DataBase.Xml");

MySerializer.Serialize(MyWriter, AllComponent);
MyWriter.Close();



AllComponent étant mon ArrayList à sérializer.


A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Commenter la réponse de cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
0
Merci
Je viens de comprendre. En fait, quasiment toutes mes Proprietes dans ma classe Match ne contiennent que des get seules mes deux proprietés qui contiennent des set se retrouvent dans mon xml...

C'est étrange non? car je n'ai pas envie de rajouter des set dans les autre...



A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Commenter la réponse de cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
0
Merci
En fait c'est peut-être logique car pour recharger mon xml précédemment sauvegardé, il me faudra suremment des set ...

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Commenter la réponse de cs_thebigboss
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
0
Merci
Si tu souhaites ne pas rajouter les set à tes propriétés penses à utilises les attributs XmlElement et XmlIgnore comme dans l'exemple ci-dessus !
Commenter la réponse de LUDINSKI