Дессериализация в список без элемента контейнера в XML - программирование
Подтвердить что ты не робот

Дессериализация в список без элемента контейнера в XML

Во всех примерах, которые я видел при использовании 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>

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

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

[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, я получаю нулевые элементы в моем Result _List _.

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

4b9b3361

Ответ 1

Использование

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