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

标签 c# .net arrays xml-serialization rename

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

相关文章:

c# - 暂停不起作用(Unity c#)

c# - Xamarin.Forms 绑定(bind)指定的转换无效

c# - 改进 WPF 可视层中的 HitTest

C# 奇怪的 WPF 组合框行为

c++ - 在 C++ 运行时将 1D 数组(指针)视为 3D 矩阵

c - 将数组初始化为 0 需要多长时间?

c# - 我不明白纯委托(delegate)和事件字段之间的区别

c# - 从输出参数中提取类

c# - 对于非漫游用户,我应该在哪里存储机器范围的应用程序设置?

Java 数组创建和数组名称更改