Sérialisation/Désérialisation XML qui déconne...

cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013 - 9 juil. 2009 à 17:59
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 10 juil. 2009 à 21:21
Bonjour à tous,

Je reprend un programme datant de 5mois pour le modifier un peu mais j'ai un problème que j'ai déja eu mais pas moyen de me souvenir de la solution que j'avais trouvée.

J'ai une classe qui me permet de sérialiser un objet en XML :

public 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;
        }
    }

Je l'appel avec :
GenericXmlSerializer.Serialize(listinv, path);
listinv étant une collection d'objets et path le chemin du fichier.

Lors de l'éxécution il bloque (pour la sérialisation) sur oXmlSerializer.Serialize(oStreamWriter, obj);
L'erreur est la suivante :

InvalidOperationException
There was an error generating the XML document

Si quelqu'un peut m'aider à comprendre je vous en remerci d'avance...

6 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
10 juil. 2009 à 11:59
1 - regarde la inner exception de ton exception pour plus d'infos.
2 - est ce que ton objet est bien serializable? (il doit avoir l'attribute [Serializable] ou implémenter l'interface IXMLSerializable). si cest n'est pas le cas, cest ton erreur
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
10 juil. 2009 à 12:02
Bonjour,

Merci de ta réponse,
oui mon objet est bien Sérialisable, par contre qu'entend tu pars l'interface IXMLSerializable ???
comment l'implémenter.

Merci.
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
10 juil. 2009 à 12:04
Si tu parle de :
using System.Xml.Serialization;

C'est déja fait.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
10 juil. 2009 à 12:26
Euh, qu'entend tu pas "oui mon objet est bien serializable"? using system.xml.serialization ne te permet que d'accéder aux objets du namespace, ni plus ni moins.
Pour IXmlSerializable, tu peux regarder sur la msdn et sur le site.................................................................................................................(y'a assez de points de suspensions pour montrer mon désespoir devant ton manque de recherches?).
Et pour finir, as tu regardé l'innerexception de ton invalidoperationexception?
0

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

Posez votre question
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
10 juil. 2009 à 14:46
Oui j'avais bien regardé mon inner execption.

J'ai trouvé mon problème un morceau de code c'était généré dans ma classe, la fossant!

pour le IXmlSerializable, j'ai juste pensé que tu avais fait une faute de frappe donc j'ai voulu confirmation avant de me lancer dans la recherche.

Merci quand même pour tes réponses.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 juil. 2009 à 21:21
Quelques corrections:

- L'attribut Serializable n'est pas obligatoire pour la Sérialization XML.
- La classe qui est sérialisée doit suivre plusieurs points qui sont indiqués dans la documentation (par exemple, doit avoir un constructeur vide)
- IXmlSerializable permet d'implémenter un Serializer personnalisé dans le cas où l'objet n'est pas Serializable (par exemple, un Graphics).

<hr />
-Blog-
-Site Perso-
0
Rejoignez-nous