Deserialisieren in eine Liste ohne ein Containerelement in XML
In allen Beispielen, die ich gesehen habe, mit XmlSerializer
jeder Zeit eine Liste oder ein array passiert, müssen Sie irgendeine Art von container element wie diesem:
<MyXml>
<Things>
<Thing>One</Thing>
<Thing>Two</Thing>
<Thing>Three</Thing>
</Things>
</MyXml>
Jedoch, das XML, das ich habe, hat kein container ähnlich Dinge oben. Es fängt gerade an, sich wiederholende Elemente. (Übrigens, die XML ist eigentlich aus der Google Geocode API)
So, ich habe XML, der folgendermaßen aussieht:
<?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>
Wie Sie sehen können, im inneren Ergebnis die Typ element wiederholt ohne Arten element, das XmlSerializer scheint zu erwarten (oder zumindest alle Dokumente und Beispiele, die ich gesehen habe). Das gleiche gilt für die _address_component_.
Den code, den ich momentan habe sieht ungefähr so aus:
[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; }
}
Jedes mal, wenn ich Versuch zu Deserialisieren das XML bekomme ich null Einträge in meinem Ergebnis _List_.
Können Sie empfehlen, wie kann ich diese zu arbeiten, wie ich bin derzeit nicht zu sehen?
InformationsquelleAutor der Frage Colin Mackay | 2011-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
InformationsquelleAutor der Antwort Aliostad