XML serializer

cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 - 13 avril 2011 à 16:28
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!!!!!!!!!

7 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
13 avril 2011 à 18:27
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 ?
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
13 avril 2011 à 18:35
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 ??
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
13 avril 2011 à 18:52
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;
    }
}
0
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
14 avril 2011 à 10:03
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!!!!!!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
14 avril 2011 à 10:15
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!!!!!!!!!
0
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
14 avril 2011 à 10:18
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!!!!!!!!!
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
14 avril 2011 à 10:47
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 !
0
Rejoignez-nous