Разбор искаженного XML с помощью RestSharp

У меня есть веб-сервис, который мне нужно использовать, который возвращает следующее:

<catalog modules="2" children="0">
  <title>Test Catalog</title>
  <link type="application/xml" rel="self" href="http://someurl"/>
  <link type="text/html" rel="alternate" href="http://someurl"/>
  <parent modules="0" children="3">
    <title>Top</title>
    <link type="application/xml" rel="self" href="http://someurl"/>
    <link type="text/html" rel="alternate" href="http://someurl"/>
  </parent>
  <module>
    <id>MODULEID123</id>
    <title>Some module title</title>
    <link type="application/xml" rel="self" href="http://someurl"/>
    <link type="text/html" rel="alternate" href="http://someurl"/>
    <type>type123</type>
    <description>Some Description</description>
  </module>
  <module>
    <id>MODULEID456</id>
    <title>Some other module title</title>
    <link type="application/xml" rel="self" href="http://someurl"/>
    <link type="text/html" rel="alternate" href="http://someurl"/>
    <type>type123</type>
    <description/>
  </module>
</catalog>

Я использую RestSharp для использования службы, и при нормальных обстоятельствах я ожидаю, что теги будут находиться под родительским узлом или чем-то подобным, чтобы я мог просто класс ответа с List<Module> Modules, который просто автоматически вытащил бы их. Однако, поскольку они просто равны узлам <parent>, <title> и <link>, это выглядит почти искаженным (хотя, по общему признанию, прошло много времени с тех пор, как я глубоко вникал в то, как XML *должен* выглядеть - спасибо, JSON!

Итак, учитывая, что это возвращаемый результат, как я могу указать RestSharp для его анализа? Если RestSharp ожидает правильно сформированный XML и, следовательно, отклоняет его, должен ли я просто вручную проанализировать его с помощью XMLReader по старинке?


person Ryan Hayes    schedule 25.11.2013    source источник


Ответы (1)


Упс, нашел в документации. Очевидно, это основано на соглашении, поэтому, хотя это выглядит немного шатко, это не должно быть проблемой, если я просто предполагаю, что есть родитель, который правильно строит мой класс ответа.

Из документов...

XmlДесериализатор

Обрабатываются два разных типа списков: без родителей (встроенные) и обычные (вложенные). Например, обе следующие XML-структуры

<?xml version="1.0" encoding="utf-8" ?>
<InlineListSample>
    <image src="1.gif">value1</image>
    <image src="2.gif">value2</image>
    <image src="3.gif">value3</image>
    <image src="4.gif">value4</image>
</InlineListSample>

<?xml version="1.0" encoding="utf-8" ?>
<NestedListSample>
    <images>
        <image src="1.gif">value1</image>
        <image src="2.gif">value2</image>
        <image src="3.gif">value3</image>
        <image src="4.gif">value4</image>
    </images>
</NestedListSample>

Сопоставляется со следующей схемой C#:

public class ListSample
{
    public List<Image> Images { get; set; }
}

public class Image
{
    public string Src { get; set; }
    public string Value { get; set; }
}

Если случайно обе структуры элементов существовали в одном и том же документе в соответствующей точке иерархии, родительские/вложенные/обычные списки имеют приоритет.

person Ryan Hayes    schedule 25.11.2013