development

XML에서 컨테이너 요소없이 목록으로 역 직렬화

big-blog 2021. 1. 7. 20:36
반응형

XML에서 컨테이너 요소없이 목록으로 역 직렬화


내가 본 모든 예제 XmlSerializer에서 목록이나 배열이 발생할 때마다 다음과 같은 일종의 컨테이너 요소가 있습니다.

<MyXml>
  <Things>
    <Thing>One</Thing>  
    <Thing>Two</Thing>  
    <Thing>Three</Thing>  
  </Things>
</MyXml>

그러나 내가 가지고있는 XML에는 위의 것들 과 유사한 컨테이너가 없습니다 . 요소를 반복하기 시작합니다. (부수적으로 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>

안으로 볼 수 있듯이 결과 유형의 어떤없이 요소의 반복 유형의 해당 요소 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; }
}

Every time I attempt to deserialize the XML I get zero items in my Result _List_.

Can you suggest how I may get this to work as I'm currently not seeing it?


Use

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

ReferenceURL : https://stackoverflow.com/questions/5271442/deserializing-into-a-list-without-a-container-element-in-xml

반응형