2014-01-21 3 views
0

Я пытаюсь десериализовать XML-ответ от API с помощью C#. Я не могу получить значения элемента ItemList. Я могу получить другие элементы, кроме ItemList. Ниже приведен пример XML, а ниже - классы, и, наконец, функция сериализации.Deserialization XmlArray не заполняется

XML:

<Root xmlns="http://whatever"> 
    <Child1> 
     <ChildElement1>16f09999</ChildElement1> 
    </Child1> 
    <ItemList> 
     <Element1> 
     ... 
     </Element1> 

     <Item> 
      <ItemElem1>12345567</ItemElem1> 
      <ItemElem2>12356465784</ItemElem2> 
      ... 
      <ItemAttributes> 
      ... 
      </ItemAttributes> 
     </Item> 
     <Item> 
     ... 
     </Item> 
    </ItemList> 
</Root> 

[Serializable()] 
[System.Xml.Serialization.XmlRoot("Root")] 
public class ResponseClass 
{ 
    [System.Xml.Serialization.XmlElement("Child1")] 
    public OperationRequest OperationRequest { get; set; } 

    [System.Xml.Serialization.XmlElement("ItemList")] 
    public ItemList ItemList { get; set; } 
} 

Класс:

[Serializable()] 
[System.Xml.Serialization.XmlRoot(ElementName = "ItemList")] 
public class ItemList 
{ 
    [XmlArray("ItemList")] 
    [XmlArrayItem("Item", typeof(Item))] 
    public Item item { get; set; } 

    [System.Xml.Serialization.XmlElement("Element1")] 
    public int Element1 { get; set; } 

} 

Serializer:

XmlSerializer serializer = new XmlSerializer(typeof(ResponseClass)); 

StreamReader reader = new StreamReader(path); 
response = (ResponseClass)serializer.Deserialize(reader); 
reader.Close(); 
+0

XmlArray в ITEMLIST из responseclass .... и некоторые модификации, такие как удаление xmlroot из ITEMLIST класса ... и в свойстве элемента удаления XmlArray ... – terrybozzio

+0

, который работает, спасибо! –

+0

не только все, что я сказал выше, то ... элемент element1 будет создан с именем, которое вы указали в ctor xelement ... – terrybozzio

ответ

0

Пожалуйста, попробуйте следующее. Поскольку ItemList/Item не является XmlArray, вам необходимо определить его как простой XmlElement.

[Serializable()] 
[System.Xml.Serialization.XmlRoot(ElementName = "Root", Namespace = "http://whatever")] 
public class ResponseClass 
{ 
    [System.Xml.Serialization.XmlElement("Child1")] 
    public OperationRequest OperationRequest { get; set; } 

    [System.Xml.Serialization.XmlElement("ItemList")] 
    public ItemList ItemList { get; set; } 
} 

[Serializable()] 
[System.Xml.Serialization.XmlRoot(ElementName = "ItemList", Namespace = "http://whatever")] 
public class ItemList 
{ 
    [System.Xml.Serialization.XmlElement("Item")] 
    public Item[] Items { get; set; } 

    [System.Xml.Serialization.XmlElement("Element1")] 
    public int Element1 { get; set; } 
} 
Смежные вопросы