经过几个小时的尝试获取列表以序列化为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; }
}
任何人都可以给我任何关于我应该前往哪条路线的想法吗?我从未处理过反序列化的问题。
答案 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)