将字符串转换为变量名称

我有一个XML文件,我有一个节点,我读了所有ChildNodes。 childNode的名称与我必须使用此childNode的值设置的变量匹配。

在循环中,我想设置:

  • myvar1到MyValue1
  • myvar2到MyValue2

C#代码:

protected string myvar1; protected string myvar2; 

XML内容如下所示:

  MyValue1 MyValue2  

C#设置变量:

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

任何的想法 ?

谢谢,

更新1:循环中的值“field”始终为null。

 public class ParametersTest { public string myvar1 { get; set; } public string 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); } 

你可以使用Reflection做到这一点:

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

RE:更新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); } 

如果您要根据XML中的节点名称分配变量,则至少有两个选项:

  • 将XML结构反序列化为具有相应成员名称的对象
  • 使用reflection填充变量
  • 使用动态方法调用/表达式树填充变量,这些树知道如何将XML节点的内容读入对象属性。

所有这些方法都提出了一种更加面向对象的方法来解决问题,然后只填充一些变量,但是通过读取XML文档填充适当的成员来创建轻量级结构会很容易。

如果您只是想从源XML构建一个简单的名称/值集合,也可以使用基于键的集合(如Dictionary )来存储值。

如果将名称和值放在字典中,则可以通过名称轻松获取值:

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

你可以做“默认”说,或者你可以看看反思。 通过使用Type.GetMember(string)方法,您可以找到具有给定名称的成员(XML中的标记名称)并设置其值。

编辑
Samich打败了我,所以我会给他+1 – 他也有示例代码。

您可以查看XmlSerializer类