Это мой входной XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<hosts>
  <host>
    <hostId>239|BS|OWN</hostId>
    <images>
      <image>
        <name>Pic.jpg</name>
        <main>true</main>
        <source>../Images/Melissa/Pic.jpg</source>
      </image>
    </images>
  </host>
</hosts>

И это мой класс, используемый для десериализации этого XML-файла:

[XmlRoot("hosts")]
public class hosts
{
    [XmlElement("host")]       
    public List<Host> Listehosts { get; set; }
}


public class Host
{
    [XmlElement("hostId")]
    public string hostId { get; set; }              

    [XmlElement("images")]
    public List<Image> Listeimages { get; set; }
}


public class Image
{
    [XmlElement("name")]
    public string name { get; set; }
    [XmlElement("main")]
    public string main { get; set; }
    [XmlElement("source")]
    public string source { get; set; }      
}

И это код моей основной программы:

string outputTmp = "Images.xml";
XmlSerializer deserializer = new XmlSerializer(typeof(hosts));
TextReader reader = new StreamReader(outputTmp);
object obj = deserializer.Deserialize(reader);
hosts XmlData = (hosts)obj;
reader.Close();            
Console.WriteLine(XmlData.Listehosts.Count);

Проблема в том, что всегда список изображений пуст, когда я выполняю свою программу. Список хостов оплачивается правильно, но когда я проверил список изображений, он содержит постоянно нулевые значения для всех атрибутов (name, main, source).

Я что-то упускаю?

1
KiraKo 10 Сен 2014 в 14:31

2 ответа

Лучший ответ

Попробуй это :

    public class Host
    {
         [XmlElement("hostId")]
         public string hostId { get; set; }              

         [XmlArray("images")] // CHANGED
         [XmlArrayItem("image", typeof(Image))] // CHANGED
         public List<Image> Listeimages { get; set; }
    }
1
Siraj Mansour 10 Сен 2014 в 10:42

В вашем коде есть небольшая ошибка, добавьте класс ImageCollection со списком внутри.

public class ImageCollection
{
    [XmlElement("image")]  
    public List<Image> Listeimages { get; set; }
}

public class Host
{
     [XmlElement("hostId")]
     public string hostId { get; set; }              

     [XmlElement("images")]
     public ImageCollection ImageCollection { get; set; }
}
0
Simon Farshid 10 Сен 2014 в 10:37