我有一个应用程序,用户可以为我上传一个未知的XML文件,在其中读取内容(我使用每个Element和Attribute名称),他可以选择哪个Attribute或Element引用每个对象属性。因此,用户配置如何使用我们的对象序列化XML。然后我保存了映射。
因此,问题是将这个XML文件转换为我的Object的最佳实践。请记住,XML可能包含未知的Attribute或Element值。
例如:
<Students>
<Student>
<Id>474</Id>
<Name>Test</Name>
</Student>
</Students>
对象:
public clas Student{
public string cod{ get; set; }
public string name{ get; set; }
}
我附上一张有关用户如何定义XML元素或属性与我们的模型类之间的相关性的图像:
答案 0 :(得分:1)
在使用XmlSerializer
的情况下,可以使用XmlAttributeOverrides
进行映射。
string codMapping = "Id"; // get from user
string nameMapping = "Name"; // get from user
var overrides = new XmlAttributeOverrides();
var attrCod = new XmlAttributes();
var attrName = new XmlAttributes();
attrCod.XmlElements.Add(new XmlElementAttribute(codMapping));
attrName.XmlElements.Add(new XmlElementAttribute(nameMapping));
overrides.Add(typeof(Student), nameof(Student.cod), attrCod);
overrides.Add(typeof(Student), nameof(Student.name), attrName);
var xs = new XmlSerializer(
typeof(List<Student>), overrides, null, new XmlRootAttribute("Students"), null);
List<Student> students;
using (var fs = new FileStream("test.xml", FileMode.Open))
{
students = (List<Student>)xs.Deserialize(fs);
}
foreach (var s in students)
Console.WriteLine(s.cod + " " + s.name);