Problème sérialisation avec héritage sur plusieurs niveaux
milomax91
Messages postés10Date d'inscriptionjeudi 19 février 2009StatutMembreDernière intervention31 mars 2011
-
31 mars 2011 à 18:20
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 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:
Lorsque vous diffusez des annonces sur un moteur de recherche, si votre enchère est identique à celle de votre concurrent et que votre niveau de qualité est supérieur, où votre publicité s'affichera-t-elle par rapport à la sienne ?
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 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(....)