2016-09-07 19 views
1

我有一些数据需要通过我正在处理的C#应用​​程序从XML文件导入PostgreSQL数据库。包含反序列化列表的XML格式

我现在面临的问题是我现在需要在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()自动处理的列表格式,那就太棒了。

+1

什么是问题吗? –

+0

使用XmlSerializer进行反序列化的XML格式(尤其是列表)是否正确? –

+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;} 
} 
+0

非常感谢你,这就像一个魅力!我发现了我的版本与第一版本的差异,并会在我理解了所有内容的基础上尝试为您的更简洁/更短的版本。 –