c# - serializar - system xml serialization xmlserializer vb net
Deserialización en una lista sin un elemento contenedor en XML (1)
Utilizar
[XmlElement("result")]
public List<Result> Results { get; set; }
En todos los ejemplos que he visto sobre el uso de XmlSerializer
cada vez que ocurre una lista o una matriz, tiene algún tipo de elemento contenedor como este:
<MyXml>
<Things>
<Thing>One</Thing>
<Thing>Two</Thing>
<Thing>Three</Thing>
</Things>
</MyXml>
Sin embargo, el XML que tengo no tiene un contenedor similar a las cosas anteriores. Simplemente comienza a repetir elementos. (Por cierto, el XML es en realidad de la API Geocode de Google)
Entonces, tengo un XML que se ve así:
<?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>
Como puede ver dentro del resultado, el elemento de tipo se repite sin ningún elemento de tipo que XmlSerializer parezca esperar (o al menos todos los documentos y ejemplos que he visto). Lo mismo ocurre con el _address_component_.
El código que tengo actualmente se ve algo como esto:
[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; }
}
Cada vez que intento deserializar el XML obtengo cero elementos en mi Lista de resultados .
¿Puede sugerir cómo puedo hacer que esto funcione, ya que actualmente no lo veo?