2014-10-24 2 views
1

Мне нужно десериализовать такую ​​структуру с помощью XmlSerializer.Deserializing в List без контейнера, который содержит еще один список

<root> 
    <parameter1> 
    5 
    </parameter1> 
    <itemList> 
     <parameter2>5</parameter2> 
     <item>v</item> 
     <item>v2</item> 
    </itemList> 
    <itemList> 
     <parameter2>50</parameter2> 
     <item>v3</item> 
     <item>v4</item> 
    </itemList> 
    </root> 

Используя этот код:

[XmlRoot("root")] 
public class Root 
{ 
    [XmlElement("parameter1")] 
    public List<ItemList> Parameter1{ get; set; } 

    [XmlElement("itemList")] 
    public List<ItemList> ItemLists{ get; set; } 
} 

public class ItemList 
{ 
    [XmlElement("parameter2")] 
    public List<ItemList> Parameter2{ get; set; } 

    [XmlElement("item")] 
    public List<Item> Items{ get; set; } 
} 

но desirialize только один элемент на каждом уровне. Если я использую такие объекты:

[XmlRoot("root")] 
public class Root 
{ 
    [XmlElement("parameter1")] 
    public List<ItemList> Parameter1{ get; set; } 

    [XmlElement("itemList")] 
    public List<ItemList> ItemLists{ get; set; } 
} 

public class ItemList 
{ 
    [XmlElement("parameter2")] 
    public List<ItemList> Parameter2{ get; set; } 

    public List<Item> Items{ get; set; } 
} 

это десериализации всех ITEMLIST объектов, но список товара пуст. В чем проблема?

ответ

0

Заканчивать эту документацию http://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx

Я не думаю, что сериализатору может понять эту структуру:

<root> 
    <parameter1> 
    5 
    </parameter1> 
    <itemList> 
    <parameter2>5</parameter2> 
    <item>v</item> 
    <item>v2</item> 
    </itemList> 
    <itemList> 
    <parameter2>50</parameter2> 
    <item>v3</item> 
    <item>v4</item> 
    </itemList> 
</root> 

то, что вы должны попробовать вместо этого что-то вроде этого:

<root> 
    <parameter1> 
    5 
    </parameter1> 
    <itemLists> 
    <itemList> 
     <parameter2>5</parameter2> 
     <items> 
     <item> 
      <parameter3>v</parameter3> 
     </item> 
     <item> 
      <parameter3>v2</parameter3> 
     </item> 
     </items> 
    </itemList> 
    <itemList> 
     <parameter2>50</parameter2> 
     <items> 
     <item> 
      <parameter3>v3</parameter3> 
     </item> 
     <item> 
      <parameter3>v4</parameter3> 
     </item> 
     </items> 
    </itemList> 
    </itemLists> 
</root> 

Это будут представлены следующими классами:

[XmlRoot("root")] 
public class Root 
{ 
    [XmlElement("parameter1")] 
    public int Parameter1{ get; set; } 

    [XmlElement("itemLists")] 
    public List<ItemList> ItemLists{ get; set; } 
} 

public class ItemList 
{ 
    [XmlElement("parameter2")] 
    public List<ItemList> Parameter2{ get; set; } 

    [XmlElement("items")] 
    public List<Item> Items{ get; set; } 
} 

public class Item 
{ 
    [XmlElement("parameter3")] 
    public string Parameter3{ get; set; } 
} 
+0

Извините, используя v..v4 Я имею в виду структурированный объект. Так что это тоже не работает. –

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