Problème sérialisation avec héritage sur plusieurs niveaux

milomax91 Messages postés 10 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 31 mars 2011 - 31 mars 2011 à 18:20
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 31 mars 2011 à 23:15
Bonjour à tous,

J'ai un petit problème lorsque que je veux sérialiser un objet contenant une liste de lui même.

Un exemple de mon uml réduit au nécessaire sera peut être un peu plus explicatif:
[http://www.yuml.me/diagram/scruffy;dir:LR/class/[Th%C3%A8mes%7Cm_conteneur:Conteneur --%3E[Conteneur%7Cm_enfant:List:Conteneur],%20[Conteneur]%5E-[Element],[Element]%5E-[ElementImage],%20[Element]%5E-[ElementTexte],%20[ElementTexte]%5E-[ElementLien]]L'url.]

Donc je dois sérialisé ma classe Thème.

J'ai essayé ceci dans ma classe Conteneur:
[XmlArrayItem("ElementImage",type(ElementImage))]
[XmlArrayItem("ElementTexte",type(ElementTexte))]
[XmlArrayItem("ElementLien",type(ElementLien))]
public List<Conteneur> Enfants 
{
    set;
    get;
}


J'ai eu une exception disant qu'il y avait eu une erreur lors de la sérialisation de Enfants.

J'ai aussi essayé avec les [XmlIclude] an dessus des classes Element,ElementTexte,ElementImage,ElementLien et j'ai toujours le même résultat.

J'ai essayé plusieurs combinaisons et j'obtiens la même chose.
A voir également:

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 mars 2011 à 19:38
Salut,

La solution est peut ici
0
milomax91 Messages postés 10 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 31 mars 2011
31 mars 2011 à 20:18
Désolé, je me retrouve encore avec la même erreur:
Une erreur s'est produite lors de la réflexion de la propriété 'Page'.

Page est l'assesseur de mon conteneur dans ma classe Thème
   [XmlElement("Conteneur")]
        public Conteneur Page
        {
            get { return m_page; }
            set { m_page = value; }
        }


Dans ma classe Conteneur
        [XmlArrayItem(Type = typeof(Conteneur)),
         XmlArrayItem(Type = typeof(ElementImage)),
         XmlArrayItem(Type = typeof(ElementTexte)),
         XmlArrayItem(Type = typeof(ElementLien))]
        public List<Conteneur> Enfant
        {
                       get {
                return m_enfant;
            }
            set
            {
                m_enfant = value;
            }
        }
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 mars 2011 à 23:15
Alors dans un premier temps
essaie de serialiser des elements avec ton code.

Une fois que tu auras compris comment est sérialiser tes classes.
Namespace atributs elements tableaux ...
Tu ajustes la serialisation pour la rendre conforme a ce que tu attends.

Ensuite la lecture se fera toute seule et la reflexion fonctionnera.

C'est la methode que j'ai utilisée dans un projet en JSON, et ca m'a gagné pas mal de temps.

Doc d = new Doc();
Page p = new Page();
.....
Conteneur c = new Conteneur();
...
ElementImage ei = new ElementImage();
......
d.Enfant.Add(c);
d.Enfant.Add(ei);
//Serialisation sur un filestream
.....Serialize(....)



Bon dev.
0
Rejoignez-nous