Sérialiser en fichier . XML

Résolu
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013 - 19 janv. 2009 à 15:40
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013 - 20 janv. 2009 à 13:38
Bonjour tout le monde,

J'aimerais sérialiser une collection d'objet !

Structure de données:
1 Classe : inventaire:
<li> public class  Inv
    {
       
        private string Nom;       
        private DateTime date;       
        private List<FichierArrivant> listfa = new List<FichierArrivant>();3</li>            //avec le constructeurs, accesseurs, mutateurs
              }

1 Classe FichierArrivant (ou plûtot Article)
<li>public class FichierArrivant
    {
        private int CodeInt;
        private int CodeEAN;
        private int StckT;
        private string Libelle;
        private int reference;
    }</li>//avec le constructeurs, accesseurs, mutateurs

En clair : 1collection d'objet Article (FichierArrivant) me donne un inventaire. Je crée dans le code une Collection d'inventaire (List) que je voudrais sérialiser en format XML.

J'ai bien essayé avec une Classe trouvée sur le net pour sérialiser facilement :

class GenericXmlSerializer
    {
        public static void Serialize(object obj, string Path)
        {
            XmlSerializer oXmlSerializer = new XmlSerializer(obj.GetType());
            StreamWriter oStreamWriter = new StreamWriter(Path);
            oXmlSerializer.Serialize(oStreamWriter, obj);
            oStreamWriter.Close();
        }

        public static object Deserialize(string Path, Type t)
        {
            XmlSerializer oXmlSerializer = new XmlSerializer(t);
            StreamReader oStreamReader = new System.IO.StreamReader(Path);
            object obj = oXmlSerializer.Deserialize(oStreamReader);
            oStreamReader.Close();
            return obj;
        }
    }

et en utilisant l'appel :
GenericXmlSerializer.Serialize(listinv, "list.xml");
//listinv = collection d'inventaire

Mais pas de résultat, ca charge, c'est long mais rien, aucun fichier!!!

Si quelqu'un pourrait m'aider un peu , je me demande si il faut modifier quelque chose dans les classe avec les balises :
[Serializable]
[System.Xml.Serialization.XmlRoot()]
[System.Xml.Serialization.XmlAttribute()]
[System.Xml.Serialization.XmlElement()]

mais je ne sais pas comment m'en servir !

Merci de votre aide !!!

6 réponses

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 janv. 2009 à 16:09
Bonjour,

Les balises ne sont pas obligatoires. Par contre, ce qui est obligatoire:
Avoir les propriétés Get & Set publiques de chaque membre que tu souhaites sérializer.
Avoir un constructeur vide dans ta classe.

Sinon, pour le moment, je ne vois pas d'autres erreurs dans ton code...

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
3
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
19 janv. 2009 à 16:29
Oui mes get/set sont bien en public, par contre je ne savais pas qu'il fallait des Constructeurs vide!

En application C# évenementiel Windows ça fonctionne très bien!
Mais j'ai aussi oublié de dire que je travail sur un émulateur de Pocket PC et là ça ne fonctionne pas!
Il ne me met pas d'erreur il exécute bien le code mais pas de fichier.xml créé. Je ne sais pas pourquoi je me demande si il ne faut pas un outils en plus ou alors que les PocketPC ne peut sérialiser.

Merci encore billou_13.

Si je peux avoir des avis sur les Pocket Pc je suis prenneur !!

Merci.
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 janv. 2009 à 16:35
Ah !

Je ne pourrai pas t'aider beaucoup car je ne connais pas du tout le développement pour pocket PC. Il faudrait peut-être regarder du côté du compact framework pour savoir s'il gère tout ton code.

Bon courage, n'hésites pas à poster si tu trouves la réponse,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
19 janv. 2009 à 16:39
Je veux bien me renseigner mais je ne sais pas du tout où regarder et surtout quoi ???

Mais si j'ai une réponse je la donnerais!
0

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

Posez votre question
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 janv. 2009 à 17:19
En cherchant un peu, j'ai trouvé deux liens qui, apparemment, suggère de ne pas utiliser le compact framework :
- http://www.zorched.net/2007/02/28/custom-xml-serialization-for-the-net-compact-framework/
- http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-compact-framework/6322/How-Can-I-do-a-XML-Serialization-in-the-Compact

A voir...

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
20 janv. 2009 à 13:38
Oui donc en fait, la sérialisation ce passais bien, c'est juste que le fichier n'aller pas dans le bon dossier, je croyais qu'il se mettrait dans le Debug de l'application sur le disque dur du PC mais en fait il aller dans le dossier racine de l'émulateur Pocket PC.

j'ai donc utiliser  :

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
Pour récupérer le dossier de base puis rajouter le chemin du fichier.xml
 
Sinon j'ai aussi remarqué qu'il fallait exécuter le .exe de l'appli directement de l'émulateur et non compiler le porgramme pour que le fichier.xml ce mette au bon endroit ! pas tres pratique pour les tests mais je m'en contenterais pour le moment.

Encore merci de ton aide!!

A bientot.
0