将XML反序列化为List

时间:2012-04-02 15:26:49

标签: c# .net xml list deserialization

经过几个小时的尝试获取列表以序列化为XML,并完成此操作(尽管我确信我做得非常糟糕)。我现在需要将XML反序列化为一个列表。这是我的初学者XML文件。

 <?xml version="1.0" encoding="utf-8"?>
<ArrayOfPrograms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Programs>
    <File-name>chrome.exe</File-name>
    <File-path>C:\Users\Shane\AppData\Local\Google\Chrome\Application\chrome.exe</File-path>
  </Programs>
  <Programs>
    <File-name>lol.launcher.exe</File-name>
    <File-path>C:\Riot Games\League of Legends\lol.launcher.exe</File-path>
  </Programs>
</ArrayOfPrograms>

继续我的配置类我正在使用;

  public class Config
{
    [XmlElement("Recipient")]
    public string recipient;
    [XmlElement("Username")]
    public string username;
    [XmlElement("Password")]
    public string password;
    [XmlElement("Serial-ID")]
    public string serialId;


[XmlElement("Email-settings")]

    public Email Emails { get; set; }

    [XmlArray("Program-List"), XmlArrayItem(typeof(Programs), ElementName = "Programs")]
    public List<Programs> Programs { get; set; }

    [XmlElement("Database-settings")]
    public Database Databases { get; set; }
}

 public class Programs
{
    public string filename;
    public string filepath;
    [XmlElement("File-name")]
    public string Filename { get; set; }
    [XmlElement("File-path")]
    public string Filepath { get; set; }

}

任何人都可以给我任何关于我应该前往哪条路线的想法吗?我从未处理过反序列化的问题。

4 个答案:

答案 0 :(得分:3)

using (var f = File.Open("...", FileMode.Open))
{
    XmlSerializer serializer = new XmlSerializer(typeof(List<Programs>));
    List<Programs> programs = (List<Programs>)serializer.Deserialize(f);
}

答案 1 :(得分:1)

我使用的这个很棒的工具用于Visual Studio中称为XSD的那种东西

http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=VS.80).aspx

基本上,您将其指向XML文件,然后构建您的C#文件。您可以将它导入到您的解决方案中,您可以将该对象用作XML文件,只需序列化或反序列化即可在两者之间进行转换。

编辑:

哦,使用它,只需单击开始,程序,Visual Studio(2008或2010),Visual Studio工具,然后单击命令提示符。

然后只需转到XML文件所在的文件夹,然后转到“XSD / l cs myFile.xml”以获取

的C#代码

答案 2 :(得分:1)

您可以使用Linq to XML并编写如下代码:

public class MyProgram
{
    public string FileName { get; set; }
    public string FilePath { get; set; }
}

// load data file
using ( XmlTextReader xmlReader = new XmlTextReader("myfilename.xml") )
{
    XDocument xdoc = XDocument.Load(xmlReader);

    var programs= from programItem in xdoc.Root.Elements()
                select new MyProgram {
                    FileName = programItem.Element("File-name").Value,
                    FilePath = programItem.Element("File-path").Value
                };

    List<MyProgram> result = programs.ToList();
}

答案 3 :(得分:0)

反序列化xml的最简单方法是使用XML架构定义工具(Xsd.exe)

xml schema definition tool