gpt4 book ai didi

c# - 使用 XmlSerializer 重命名平面 xml 数组中的数组项

转载 作者:行者123 更新时间:2023-12-02 13:07:06 29 4
gpt4 key购买 nike

我有一个具有以下格式的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com