我需要通过我目前正在处理的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()自动处理的列表格式,那就太棒了。
答案 0 :(得分:1)
只要该类的形状匹配,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;}
}