从xml元素值设置模型属性

时间:2016-07-06 15:53:07

标签: c# xml

我有一个看起来像这样的xml文件

<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>

我有一个对应的类,它将所有元素名称作为属性。我们假设我收集了所有元素,例如

IEnumerable<XElement> elements;

如何将类的属性值设置为xml文件中的元素值?

我唯一想到的是循环元素并使用

等部分创建一个大的switch语句
...
case "Element3":
    model.Element3 = element.Value;
    break;
...

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

假设您已经有一个类Model,其中包含您希望从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"),
};

另一种选择是创建字典,因此每次将新标记名称添加到xml文件时,您都不需要更新模型。

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

或使用Linq

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

最后,您可以直接从xml生成动态对象。这里有一个例子:Deserialize XML To Object using Dynamic