有没有一种方法可以在c#中反序列化XML属性,使其映射到以元素命名的属性?

时间:2020-01-14 09:20:15

标签: c# .net xml xml-deserialization

我遇到一种情况,我需要将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”,这会使事情变得有些混乱,如果在数据反序列化时一开始就进行处理,那就更好了。

编辑:应该补充一点,我已经尝试过“路径”方法并且无法使其正常工作,所以我应该问“我做错了吗?”

0 个答案:

没有答案