小编典典

在XML中没有容器元素的情况下反序列化为列表

c#

在我所见过的所有使用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 似乎期望的任何 type
元素(或至少我看到的所有文档和示例)。_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_都会得到零项。

您能建议我如何使它工作,因为我目前看不到它吗?


阅读 304

收藏
2020-05-19

共1个答案

小编典典

采用

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