Xml DeSerialization - Array Elements

问题描述:

看着我的XML示例,我该如何去反序列化它? 但我需要反序列化Xml元素数组。我怎么做?Xml DeSerialization - Array Elements

<hotels num="1"> 
<hotel num="1" item="2"></hotel> 
<hotel num="2" item="2"></hotel> 
<hotel num="3" item="2"></hotel> 
<hotel num="4" item="2"></hotel> 
<hotel num="5" item="2"></hotel> 
</hotels> 

[Serializable] 
[XmlRoot("hotels")] 
public class Hotels 
{ 
[XmlElement("id")] 
public string id { get; set; } 
[XmlElement("hotel")] 
public Hotel hotel { get; set; } 
} 

[Serializable] 
[XmlRoot("hotel")] 
public class Hotel 
{ 
[XmlElement("id")] 
public string id { get; set; } 
[XmlElement("item")] 
public string item { get; set; } 
} 
+0

最新的DataAnotation使用,以确定该元素是XML数组? – mcamara

+1

我认为这不会解决你的问题,但酒店类的'Hotel'属性可能应该更改为'List '或'Hotel []' – hawkke

尝试这样的:

[XmlRoot("hotels")] 
public class HotelData 
{ 
    [XmlAttribute("num")] 
    public string Id { get; set; } 

    [XmlElement("hotel")] 
    public List<Hotel> Hotels { get; set; } 
} 

public class Hotel 
{ 
    [XmlAttribute("num")] 
    public string Id { get; set; } 

    [XmlAttribute("item")] 
    public string Item { get; set; } 
} 

,然后反序列化:

public class Program 
{ 
    static void Main() 
    { 
     var serializer = new XmlSerializer(typeof(HotelData)); 
     using (var reader = XmlReader.Create("test.xml")) 
     { 
      var data = (HotelData)serializer.Deserialize(reader); 
      Console.WriteLine(data.Id); 
      foreach (var hotel in data.Hotels) 
      { 
       Console.WriteLine("num: {0}, item:{1}", hotel.Id, hotel.Item); 
      } 
     } 
    } 
} 
+0

,但我不需要设置XmlArray在[XmlElement(“hotel”)] public list Hotels {get;组; }? – mcamara

+0

你为什么不需要?您的XML似乎包含一系列酒店。至少你在这里展示的例子。但是,也许你的实际XML是不同的,是吗? –