将XML反序列化为列表

本文关键字:列表 反序列化 XML | 更新日期: 2023-09-27 18:29:49

经过数小时的尝试,获得了一个要序列化为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; }
}

有人能告诉我该走哪条路吗?我从未处理过反序列化到列表中的问题。

将XML反序列化为列表

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

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文件所在的文件夹,并为C#代码"XSD/l cs myFile.XML",即

您可以使用Linq来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();
}

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

xml模式定义工具