Dans tous les exemples que j'ai vus d'utiliser XmlSerializer
chaque fois qu'une liste ou un tableau se produit, vous avez une sorte d'élément conteneur comme ceci:
<MyXml>
<Things>
<Thing>One</Thing>
<Thing>Two</Thing>
<Thing>Three</Thing>
</Things>
</MyXml>
Cependant, le XML que j'ai n'a pas de conteneur similaire à Things ci-dessus. Il commence juste à répéter des éléments. (Par ailleurs, le XML provient en fait de l'API Geocode de Google)
Donc, j'ai XML qui ressemble à ceci:
<?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>
Comme vous pouvez le voir à l'intérieur résultat l'élément type se répète sans aucun élément types que XmlSerializer semble attendre (ou à moins tous les documents et exemples que j'ai vus). Il en va de même pour le _address_component_.
Le code que j'ai actuellement ressemble à ceci:
[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; }
}
Chaque fois que j'essaye de désérialiser le XML, je ne reçois aucun élément dans mon Résultat _List_.
Pouvez-vous suggérer comment je peux faire en sorte que cela fonctionne, car je ne le vois pas actuellement?
Utilisation
[XmlElement("result")]
public List<Result> Results { get; set; }