首页 > 解决方案 > 有没有办法在 c# 中反序列化 XML 属性,以便它映射到以元素命名的属性?

问题描述

我有一种情况,我需要将 XML 反序列化为模型,然后使用自动映射器将该模型映射到另一个模型。问题是 XML 的结构方式使得元素名称与我最初尝试映射到的模型中的属性相匹配……但在大多数情况下,实际数据位于名为“Val”的属性中在元素中,例如:

<Vehicle>
      <RegNo Val="ABC123A"/>
</Vehicle>

我认为现在进行这种映射的正常方法是(我没有为根元素烦恼!):


[XmlElement("Vehicle")]
public class Vehicle {
[XmlElement("Regno")]
public Regno Regno { get; set; }
}


public class Regno {
    [XmlAttribute]
    public string Val {get;set;}    
}

这将允许 XML 映射到“持有”对象,但这确实意味着,与其引用名为 Regno 的字符串,使映射到第二个模型相当简单,我将不得不引用 Regno.Val。这听起来并不多,但 XML 中有很多元素,其中一些使用不同命名的属性等。我真正想做的是使用 XMLAttributes 等在持有模型定义中定义所有繁重的工作:

[XmlElement("Vehicle")]
public class Vehicle {
[XmlElement("Regno.Val")]
public string Regno { get; set; }
}

所以几乎就像能够提供路径或限定值名称一样。实际上,如果有意义的话,将数据向上移动一层!

是否有可能做到这一点?我的意思是我可以在自动映射器中设置定制映射以从保持模型移动到主模型,但如果我可以通过每个模型的程序集中的属性并从一个模型映射到另一个模型,它会更简单。还考虑到并非所有属性都称为“Val”,这可能会使事情变得有些混乱,如果我能在反序列化数据的一开始就处理它会更好。

编辑:应该补充说我已经尝试过“路径”方法但无法让它发挥作用,所以我应该问“我做错了吗?”

标签: c#.netxmlxml-deserialization

解决方案


推荐阅读