2013-10-09 2 views
1

У меня есть следующий код, но не удается десериализовать, можете ли вы увидеть, где я ошибаюсь? Он захватывает только первую запись в первом элементе массива.Невозможно десериализовать XML

[XmlRootAttribute("Booking")] 
     public class Reservation 
     { 
      [XmlArray("Included")] 
      [XmlArrayItem("Meals")] 
      public Meals[] Food { get; set; } 

      [XmlArrayItem("Drinks")] 
      public Drinks[] Drink { get; set; } 

     } 

     public class Meals 
     { 
      [XmlAttribute("Breakfast")] 
      public string Breakfast { get; set; } 

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

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

     public class Drinks 
     { 
      [XmlAttribute("Soft")] 
      public string Softs { get; set; } 

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

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

Вот связанный с XML

<?xml version="1.0" standalone="yes"?> 
<Booking> 
    <Included> 
     <Meals 
     Breakfast="True" 
     Lunch="True" 
     Dinner="False"> 
     </Meals> 
     <Drinks 
      Soft="True" 
      Beer="False" 
      Wine="False"> 
     </Drinks> 
    </Included> 
    <Included> 
     <Meals 
     Breakfast="True" 
     Lunch="False" 
     Dinner="False"> 
     </Meals> 
     <Drinks 
      Soft="True" 
      Beer="True" 
      Wine="True"> 
     </Drinks> 
    </Included> 
</Booking> 

Я немного новичок так что любая помощь будет большим, к сожалению, после того, как траление через многие exmaples вы уже в Интернете я до сих пор не были способный понять это.

ответ

0

Используйте следующий пример и применить этот синтаксис в ListItem массиве,

[XmlType("device_list")] 
[Serializable] 
public class DeviceList { 
    [XmlAttribute] 
    public string type { get; set; } 

    [XmlElement("item")] 
    public ListItem[] items { get; set; } 
} 

следующей ссылкой содержит весь синтаксис & атрибуты

http://msdn.microsoft.com/en-us/library/2baksw0z.aspx

0

я не вижу очевидный способа может быть ваша структура класса соответствует XML-документу. Основополагающие организации, похоже, совсем другие.

Иерархия следующий класса может быть легко десериализации из документа XML вы обеспечиваете (если ваш документ охватывает общий случай):

[Serializable] 
[XmlRoot("Booking")] 
public class Booking : List<Included> 
{ 
} 

[Serializable] 
public class Included 
{ 
    public Meals Meals { get; set; } 
    public Drinks Drinks { get; set; } 
} 

public class Meals 
{ 
    [XmlAttribute("Breakfast")] 
    public string Breakfast { get; set; } 

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

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

public class Drinks 
{ 
    [XmlAttribute("Soft")] 
    public string Softs { get; set; } 

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

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

Затем десериализации код будет: (serializedObject это строка, содержащей ваши сериализованным объект)

XmlSerializer ser = new XmlSerializer(typeof (string)); 
XmlReader reader = XmlTextReader.Create(new StringReader(serializedObject)); 
var myBooking = ser.Deserialize(reader) as Booking; 
+0

Отличное спасибо, как я могу обернуть это в читатель? – user1641194

+0

@ user1641194 извините, не заметил твой комментарий. Догадайся, что ты это понял. Обновленный мой ответ в любом случае. – jbl

Смежные вопросы