包含反序列化列表的格式 XML

Format XML containing List for Deserialization

我有一些数据需要通过我目前正在处理的 C# 应用程序从 XML 文件传输到 PostgreSQL 数据库。

我现在面临的问题是我现在需要向 XML 添加某种列表。目前看起来像这样:

<itemOne>stuff</itemOne>
<itemTwo>otherStuff</itemTwo>
<listOfItems>
    <listItem>
        <partOne>123</partOne>
        <partTwo>abc</partTwo>
    </listItem>
    <listItem>
        <partOne>123</partOne>
        <partTwo>abc</partTwo>
    </listItem>
</listOfItems>

所以我发现了很多处理如何反序列化列表主题的线程。但是他们都开始说应该修改提议的XML。因为我在这方面拥有我所希望的所有自由,所以我想首先创建一个最佳的 XML 格式。

嗯,然后反序列化吧。因此,如果有任何格式的列表可以由 XmlSerializer.Deserialize() 自动处理,那就太棒了。

只要 class 的形状匹配,该数据就会由 XmlSerializer 自动处理。例如:

[XmlRoot("yourRootName")]
public class Foo {
    [XmlElement("itemOne")] public string A {get;set;}
    [XmlElement("itemTwo")] public string B {get;set;}

    [XmlArray("listOfItems")]
    [XmlArrayItem("listItem")]
    public List<Bar> Bars {get;set;}
}
public class Bar {
    [XmlElement("partOne")] public int C {get;set;}
    [XmlElement("partTwo")] public string D {get;set;}
}

当然,如果是我的话,我会想说得​​简洁一些:

<betterName foo="stuff" blab="otherStuff">
     <nameMe a="123" b="abc"/>
     <nameMe a="456" b="def"/>
</betterName>

这只需要一些最小的更改:

[XmlRoot("betterName")]
public class Foo {
    [XmlAttribute("foo")] public string A {get;set;}
    [XmlAttribute("bar")] public string B {get;set;}

    [XmlElement("nameMe")]
    public List<Bar> Bars {get;set;}
}
public class Bar {
    [XmlAttribute("a")] public int C {get;set;}
    [XmlAttribute("b")] public string D {get;set;}
}