使用RestSharp解析格式错误的XML

时间:2013-11-25 21:32:47

标签: c# 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手动解析它吗?

1 个答案:

答案 0 :(得分:0)

糟糕,在文档中找到了它。显然这是基于约定的,所以虽然这看起来有点不稳定,但如果我假设父母在那里正确构建我的响应类,那应该没问题。

来自文档...

XmlDeserializer

处理两种不同类型的列表:无父(内联)和常规(嵌套)。例如,以下两种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; }
}

如果两个元素结构偶然存在于层次结构中相关点的同一文档中,则父级/嵌套/常规列表优先。