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

XML vers OBJECT

1 réponse
Avatar
llopht
Salut à tous,

Sous flash j'ai une classe d'une vingtaine de ligne qui me permet de
convertir un XML en JSON. J'obtiens donc un objet avec un ensemble de
propriétés et de collection (sans typage, c'est du string).

Est-il possible en C# d'obtenir le même genre de choses en dynamique
(puisque en statique je sais qu'on peux le faire) c'est à dire de donner
un fichier XML à un méthode X et d'obtenir un objet correspondant que
l'on peux utiliser...

Bon si il faut passer un XSD en option pour typer les données c'est pas
un mal...

Ex.

Fichier.xml
<mescontacts>
<contact>
<prenom>Prenom1</prenom>
<nom>Nom1</nom>
<age>32</age>
</contact>
<contact>
<prenom>Prenom2</prenom>
<nom>Nom2</nom>
<age>32</age>
</contact>
</mescontacts>

On transforme :
object mesContacts = xmlToObh("Fichier.xml");

mesContacts[0].prenom pour obtenir le prénom du premier contact

Alors y a un truc du genre d'intégrer dans C# ?

Merci

Jérôme

1 réponse

Avatar
Musso
llopht a exprimé avec précision :
Salut à tous,

Sous flash j'ai une classe d'une vingtaine de ligne qui me permet de
convertir un XML en JSON. J'obtiens donc un objet avec un ensemble de
propriétés et de collection (sans typage, c'est du string).

Est-il possible en C# d'obtenir le même genre de choses en dynamique (puisque
en statique je sais qu'on peux le faire) c'est à dire de donner un fichier
XML à un méthode X et d'obtenir un objet correspondant que l'on peux
utiliser...

Bon si il faut passer un XSD en option pour typer les données c'est pas un
mal...

Ex.

Fichier.xml
<mescontacts>
<contact>
<prenom>Prenom1</prenom>
<nom>Nom1</nom>
<age>32</age>
</contact>
<contact>
<prenom>Prenom2</prenom>
<nom>Nom2</nom>
<age>32</age>
</contact>
</mescontacts>

On transforme :
object mesContacts = xmlToObh("Fichier.xml");

mesContacts[0].prenom pour obtenir le prénom du premier contact

Alors y a un truc du genre d'intégrer dans C# ?

Merci

Jérôme



Bonjour Jérôme,

Vu que le C# est un langage dit statique, tu ne peux pourra pas écrire
mesContacts[0].prenom sans que le compilateur ne sache ce que c'est.

La meilleure méthode est d'utiliser une API XML comme Linq To XML.
Grâce aux types anonymes tu peux écrire la chose suivante :

XDocument doc = XDocument.Load("contacts.xml");

var contacts = from contact in doc.Descendants("contact")
select new
{
Prenom = (string)contact.Element("prenom"),
Nom = (string)contact.Element("nom"),
Age = (string)contact.Element("age")
};

foreach (var contact in contacts)
{
Console.WriteLine(contact.Nom);
Console.WriteLine(contact.Prenom);
Console.WriteLine(contact.Age);
}

Ce qui se rapproche grandement de ce que tu veux, seulement c'est du
statique. Avec la variable "contacts", tu peux écrire :

contacts.ToArray()[0].Prenom;

Et cela compilera sans problême.

--
Paul Musso