XML serializer

Signaler
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
-
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!!!!!!!!!

7 réponses

Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
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 ?
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
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 ??
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
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;
    }
}
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
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!!!!!!!!!
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
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!!!!!!!!!
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
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!!!!!!!!!
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
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 !