我有一个具有以下格式的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item Property1="A" Property2="B" />
<Item Property1="C" Property2="D" />
</Items>
我需要阅读<Item>
作为类对象的元素 MyClass
使用 XmlSerializer。
public class MyCLass
{
[XmlAttribute]
public string Property1 { get; set; }
[XmlAttribute]
public string Property2 { get; set; }
}
目前,我有以下代码来读取文件:
XmlSerializer serializer =
new XmlSerializer(typeof(MyClass[]), new XmlRootAttribute(@"Items"));
MyClass[] list = (MyClass[])serializer.Deserialize(...);
由于元素名称<Item>
与类名 MyCLass
不同,数组中的元素根本没有被反序列化。如果我重命名 MyClass
,上面的代码就可以工作至Item
,但不幸的是我不允许更改 XML 文件或类名。
如何映射两者以便可以正确读取文件?
提前致谢!
最佳答案
使用包含数组的包装类,这将允许您应用 XmlElement
属性:
public class MyClassList
{
[XmlElement("Item")]
public MyClass[] Items { get; set; }
}
var items = new[]
{
new MyClass { Property1 = "A", Property2 = "B" },
new MyClass { Property1 = "C", Property2 = "D" },
};
var list = new MyClassList { Items = items };
using (var writer = new StringWriter())
{
var xs = new XmlSerializer(typeof(MyClassList), new XmlRootAttribute("Items"));
xs.Serialize(writer, list);
writer.ToString().Dump();
}
关于c# - 使用 XmlSerializer 重命名平面 xml 数组中的数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4418508/