Kri*_*s-I 8 c# xml reflection deserialization
我有一个XML文件,我有一个节点,我读了所有ChildNodes.childNode的名称与我必须使用此childNode的值设置的变量匹配.
在循环中,我想设置:
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)
你可以使用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)
如果您要根据XML中的节点名称分配变量,则至少有两个选项:
所有这些方法都提出了一种更加面向对象的方法来解决问题,然后只填充一些变量,但是通过读取XML文档填充适当的成员来创建轻量级结构会很容易.
Dictionary<string, string>如果您只是想从源XML构建一个简单的名称/值集合,您还可以使用基于键的集合(如a )来存储值.
| 归档时间: |
|
| 查看次数: |
14446 次 |
| 最近记录: |