在XML中反序列化为没有容器元素的List

时间:2011-03-11 09:58:26

标签: c# .net xml-serialization

在我看到使用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>

正如您在结果中看到的那样, type 元素重复,而 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时,我在结果 _List _中获得零项。

你能否建议我如何使用它,因为我目前还没有看到它?

1 个答案:

答案 0 :(得分:89)

使用

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