XML vers OBJECT

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Musso
Le #17252391
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
Publicité
Poster une réponse
Anonyme