将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; }
}
有人能告诉我该走哪条路吗?我从未处理过反序列化到列表中的问题。
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模式定义工具