将字符串转换为变量名称

Kri*_*s-I 8 c# xml reflection deserialization

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

在循环中,我想设置:

  • myvar1到MyValue1
  • myvar2到MyValue2

C#代码:

protected string myvar1;
protected string myvar2;
Run Code Online (Sandbox Code Playgroud)

XML内容如下所示:

<parameters>
 <myvar1>MyValue1</myvar1>
 <myvar2>MyValue2</myvar2>
</parameters>
Run Code Online (Sandbox Code Playgroud)

C#设置变量:

    foreach (var item in xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes)
    {
        ??????
    }
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

谢谢,

更新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);
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*ich 7

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

var type = typeof(SomeClass);
var field = type.GetField(item.Name);
field.SetValue(null, item.InnerText);
Run Code Online (Sandbox Code Playgroud)

RE:更新1

var parameters = new ParametersTest();
var type = parameters.GetType();

var s = @"<parameters>
            <MyVar1>MyValue1</MyVar1>
            <MyVar2>MyValue2</MyVar2>
           </parameters>";

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);
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*ora 5

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

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

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

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