Десериализация в список без элемента контейнера в XML - PullRequest
55 голосов
/ 11 марта 2011

Во всех примерах, которые я видел при использовании XmlSerializer, каждый раз, когда возникает список или массив, у вас есть какой-то элемент контейнера, подобный этому:

<MyXml>
  <Things>
    <Thing>One</Thing>  
    <Thing>Two</Thing>  
    <Thing>Three</Thing>  
  </Things>
</MyXml>

Однако, у меня нет XML-контейнера, похожего на Things выше. Это только начинает повторять элементы. (Кстати, XML на самом деле из Google Geocode API)

Итак, у меня есть XML, который выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
  <status>OK</status>
  <result>
    <type>locality</type>
    <type>political</type>
    <formatted_address>Glasgow, City of Glasgow, UK</formatted_address>
    <address_component>
      <long_name>Glasgow</long_name>
      <short_name>Glasgow</short_name>
      <type>locality</type>
      <type>political</type>
    </address_component>
    <address_component>
      <long_name>East Dunbartonshire</long_name>
      <short_name>East Dunbartonshire</short_name>
      <type>administrative_area_level_3</type>
      <type>political</type>
    </address_component>
    <!-- etc... -->
  </result>
  <result>
    <!-- etc... -->
  </result>
  <result>
    <!-- etc... -->
  </result>
</GeocodeResponse>

Как вы можете видеть внутри результат элемент типа повторяется без каких-либо элементов types , которых XmlSerializer ожидает (или, по крайней мере, по крайней мере) все документы и примеры я видел). То же самое касается _адрес_компонента _.

Код, который у меня сейчас есть, выглядит примерно так:

[XmlRoot("GeocodeResponse")]
public class GeocodeResponse
{
    public GeocodeResponse()
    {
        this.Results = new List<Result>();
    }

    [XmlElement("status")]
    public string Status { get; set; }

    [XmlArray("result")]
    [XmlArrayItem("result", typeof(Result))]
    public List<Result> Results { get; set; }
}

Каждый раз, когда я пытаюсь десериализовать XML, я получаю ноль элементов в моем Результате _List _.

Можете ли вы предложить, как я могу заставить это работать, поскольку я в настоящее время не вижу это?

1 Ответ

89 голосов
/ 11 марта 2011

Используйте

[XmlElement("result")]
public List<Result> Results { get; set; }
...