c# - 有没有办法在 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”,这可能会使事情变得有些混乱,如果我能在反序列化数据的一开始就处理它会更好。
编辑:应该补充说我已经尝试过“路径”方法但无法让它发挥作用,所以我应该问“我做错了吗?”
解决方案
推荐阅读
- docker - 什么是使用 kubernetes pod 挂载文件夹?
- java - 如何使用 bytebuddy 拦截 Java 中的“同步”代码块?
- c - 转到特定元素 C
- primefaces - Primefaces 的问题与更新属性确认对话框
- google-chrome - 认知 CITS 测试通过 Bamboo 运行:“接收来自渲染器的消息超时”
- python - 将 str 分数转换为 pandas df 中的浮点数
- python - 具有不同值类型的 Python3 输入
- powerbi - Power BI 数据类型
- excel-formula - 我正在尝试制作一个excel公式,从列中的最后一个数字中减去列中的倒数第二个数字
- java - Java 文档注释未完全显示