Десериализация XML в список - PullRequest
0 голосов
/ 02 апреля 2012

После многих часов попыток получить список для сериализации в 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 ]

3 голосов
/ 02 апреля 2012
using (var f = File.Open("...", FileMode.Open))
{
    XmlSerializer serializer = new XmlSerializer(typeof(List<Programs>));
    List<Programs> programs = (List<Programs>)serializer.Deserialize(f);
}
1 голос
/ 02 апреля 2012

Это замечательный инструмент, который я использую для такого рода вещей, который поставляется с 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 #, который

1 голос
/ 02 апреля 2012

Вы можете использовать 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();
}
0 голосов
/ 02 апреля 2012

Самый простой способ десериализации xml - использование инструмента определения схемы XML (Xsd.exe)

инструмента определения схемы xml

...