Convertir une chaîne en nom de variable

J’ai un fichier XML, un noeud et je lis tous les ChildNodes. Le nom du childNode correspond à une variable que je dois définir avec la valeur de ce childNode.

Dans la boucle, j’aimerais bien régler:

  • myvar1 à MyValue1
  • myvar2 à MyValue2

Le code C #:

protected ssortingng myvar1; protected ssortingng myvar2; 

Le contenu XML ressemble à ceci:

  MyValue1 MyValue2  

Variables définies en C #:

  foreach (var item in xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes) { ?????? } 

Une idée ?

Merci,

UPDATE 1: la valeur “champ” dans la boucle est nulle tout le temps.

 public class ParametersTest { public ssortingng myvar1 { get; set; } public ssortingng myvar2 {get; set;} } var type = typeof(ParametersTest); foreach (XmlNode item in xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes) { var field = type.GetField(item.LocalName); field.SetValue(field, item.InnerText); } 

Vous pouvez le faire en utilisant Reflection :

 var type = typeof(SomeClass); var field = type.GetField(item.Name); field.SetValue(null, item.InnerText); 

RE: MISE À JOUR 1

 var parameters = new ParametersTest(); var type = parameters.GetType(); var s = @" MyValue1 MyValue2 "; var xmlParamInstallation = new XmlDocument(); xmlParamInstallation.LoadXml(s); foreach (XmlNode item in xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes) { var field = type.GetProperty(item.LocalName); field.SetValue(parameters, item.InnerText, null); } 

Si vous souhaitez affecter des variables en fonction des noms de nœuds XML, vous avez au moins deux options:

  • Désérialiser la structure XML en un object avec les noms de membre correspondants
  • Remplir les variables en utilisant la reflection
  • Remplissez les variables à l’aide d’appels de méthode dynamics / arborescences d’expression qui savent lire le contenu du nœud XML dans une propriété d’object.

Toutes ces approches suggèrent une approche plus orientée object du problème que de simplement renseigner quelques variables, mais il serait facile de créer une structure légère avec les membres appropriés, renseignée à la lecture du document XML.

Vous pouvez également utiliser une collection basée sur des clés (telle que Dictionary ) pour stocker les valeurs si vous souhaitez simplement créer une collection nom / valeur simple à partir du code XML source.

Si vous mettez les noms et les valeurs dans un dictionnaire, vous pouvez facilement obtenir les valeurs par nom:

 Dictionary parameters = xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes .ToDictionary(n => n.Name, n => n.InnerText); myvar1 = parameters["myvar1"]; myvar2 = parameters["myvar2"]; 

Vous pouvez soit faire ce que dit “Par défaut”, ou vous pouvez regarder dans Reflection. En utilisant la Type.GetMember(ssortingng) , vous pouvez trouver un membre portant le nom donné (le nom de la balise dans votre code XML) et définir sa valeur.

MODIFIER
Samich m’a battu, alors je vais lui donner +1 – il a aussi un exemple de code.

Vous pouvez consulter la classe XmlSerializer