2016-07-06 3 views
0

J'ai un fichier xml qui ressemble à cecipropriétés du modèle de réglage de l'élément xml valeurs

<Root> 
    <Element1>17890</Element> 
    <Element2>0001</Element2> 
    <Element3>123451324A</Element3> 
    <Element4>1</Element4> 
    <Element5>ABC</Element5> 
    <Element6>DEF</Element6> 
    <Element7>99.10</Element7> 
    <Element8>GHI</Element8> 
    <Element9>2014-01-25</Element9> 
    <Element10>JKL</Element10> 
    <Element11>737268</Element11> 
</Root> 

Et j'ai une classe correspondante qui ont tous les noms d'éléments comme propriétés. Disons que j'ai une collection de tous les éléments tels que

IEnumerable<XElement> elements; 

Comment définir les valeurs de propriété de la classe aux valeurs des éléments du fichier XML?

La seule chose que j'ai pensé est en boucle sur les éléments et faire une déclaration de grande commutateur avec des sections telles que

... 
case "Element3": 
    model.Element3 = element.Value; 
    break; 
... 

est-il une meilleure solution?

+0

votre modèle at-il tous les champs apparaissant dans le xml? – derloopkat

+0

Pourquoi vous ne pouvez pas utiliser la sérialisation: [Classe XmlSerializer] (https://msdn.microsoft.com/fr-fr/library/system.xml.serialization.xmlserializer (v = vs.110) .aspx) – Fabio

+0

Oui le modèle a tous les champs apparaissant dans le xml. – Spennet

Répondre

0

En supposant que vous avez déjà un modèle de classe avec les champs que vous souhaitez obtenir à partir du xml:

var elements = XDocument.Load("XMLFile1.xml").Root.Elements(); 
var model = new Model() 
{ 
    Element1 = elements.FirstOrDefault(t => t.Name.LocalName == "Element1"), 
    Element2 = elements.FirstOrDefault(t => t.Name.LocalName == "Element2"), 
}; 

Une autre option est de créer un dictionnaire, vous n'avez pas besoin de mettre à jour votre modèle chaque fois qu'un le nouveau nom de tag est ajouté au fichier xml.

var model = new Dictionary<string, string>(); 
foreach(XElement tag in elements) 
{ 
    model[tag.Name.LocalName] = tag.Value; 
} 

Ou LINQ

var model = elements.ToDictionary(e => e.Name.LocalName, e => e.Value); 

Enfin, vous pouvez générer un objet dynamique directement à partir du xml. Il y a un exemple ici: Deserialize XML To Object using Dynamic