从 xml 元素值设置模型属性

本文关键字:模型 属性 设置 xml 元素 | 更新日期: 2023-09-27 17:55:32

我有一个看起来像这样的 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 文件中的元素值?

我唯一想到的是遍历元素并用

诸如
...
case "Element3":
    model.Element3 = element.Value;
    break;
...

有没有更好的解决方案?

从 xml 元素值设置模型属性

假设你已经有一个类模型,其中包含你想要从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 生成动态对象。这里有一个示例:使用动态反序列化 XML 到对象