Sérialiser en fichier . XML [Résolu]

cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention - 19 janv. 2009 à 15:40 - Dernière réponse : cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention
- 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 !!!
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 19 janv. 2009 à 16:09
3
Merci
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
---------------------

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de billou_13
cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention - 19 janv. 2009 à 16:29
0
Merci
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.
Commenter la réponse de cs_vagg
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 19 janv. 2009 à 16:35
0
Merci
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
---------------------
Commenter la réponse de billou_13
cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention - 19 janv. 2009 à 16:39
0
Merci
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!
Commenter la réponse de cs_vagg
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 19 janv. 2009 à 17:19
0
Merci
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
---------------------
Commenter la réponse de billou_13
cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention - 20 janv. 2009 à 13:38
0
Merci
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.
Commenter la réponse de cs_vagg

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.