Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

désérialiser une chaine xml

1 réponse
Avatar
fredo
j'ai une chaine de caract=E8re contenant quelque chose de=20
ce genre:

<?xml version=3D"1.0" encoding=3D"utf-8"?>
<OrderedItem xmlns:xsd=3D"http://www.w3.org/2001/XMLSchema"=20
xmlns:xsi=3D"http://www.w3.org/2001/XMLSchema-instance">
<Description>yyyyy</Description>
</OrderedItem>

je voudrai savoir quel est le moyen le plus simple de=20
d=E9s=E9rialiser cette chaine directement dans un objet?

merci

1 réponse

Avatar
Ambassadeur Kosh
directement, il y a la reflexion.
mais on peut aussi la jouer comme ça.

using System.Xml ;
...
XmlDocument document = new XmlDocument() ;
document.LoadXml(chaine) ;
myObject.LoadFromXml(document.documentElement) ;

...

class MyObject
{
public void LoadFromXml(XmlElement element)
{
this.date = XmlConvert.ToDateTime(element.GetAttribute("date")) ;
this.description = element.SelectSingleNode("description").InnerText
;

XmlNodeList itemsNodes = element.SelectNodes("item") ;

items = new int[itemsNodes.Count] ;

int index = 0 ;

foreach(XmlElement item in itemsNodes)
{
items[index] = XmlConvert.ToInt32(item.InnerText) ;
index++ ;
}
}

DateTime date ;
int [] items ;
string description ;
}

<myobject date="2004-08-17T21:43:49.5625000+02:00"/>
<item>654</item>
<item>371</item>
<description>du texte</description>
<item>888</item>
</myobject>

le Select* prend une chaine xpath. je te laisse imaginer la facilité
d'écriture que ça te donne.
XmlConvert assure la traduction dans les deux sens des types standards.
si tu maitrises xsd et xsl, tu vas vite te fabriquer ta propre gen de code.
ça permet de faire évoluer ses schémas dans le sens que tu veux.
XmlSpy peut te generer des Binders. c'est pas mal aussi comme approche.

sinon, la reflexion c'est bien, mais j'avoue ne pas maitriser complement le
truc, en terme de pourquoi, de comment, de conséquences, et de ce qui se
passe rellement.

peut être que quelques explications sur ton besoin permettraient de répondre
moins vaguement et de ne pas enfoncer de portes ouvertes.

voila voila