使用RestSharp

时间:2015-08-14 13:59:26

标签: c# xml restsharp xml-deserialization

我正在尝试使用RestSharp反序列化以下XML响应:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:payload xmlns:ns0="http://www.website.co.za/JSON_Token">
<ns0:content>
    <ns0:reason>token successfully created</ns0:reason>
    <ns0:success>true</ns0:success>
    <ns0:authDetails>
        <ns0:accessToken>feefaee94822a92ca7f134f74588cc69081b0e94</ns0:accessToken>
        <ns0:expiresIn>604800</ns0:expiresIn>
        <ns0:refreshToken>bc036cba4d346bf76809e143879cb8fb6983940c</ns0:refreshToken>
    </ns0:authDetails>
</ns0:content>

这是我的代码的快照:

IRestResponse response = client.Execute(request);

RestSharp.Deserializers.XmlDeserializer deserial = new RestSharp.Deserializers.XmlDeserializer();

payload apiresponse = deserial.Deserialize<payload>(response);

这是我得到的错误:

  

未处理的类型&#39; System.Xml.XmlException&#39;发生在   System.Xml.dll其他信息:根级别的数据是   无效。第1行,第1位。

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:2)

感谢所有回复。

我做了一些调查,在将响应内容打印到字符串后,事实证明RestSharp实际上是将它从XML转换为JSON。不知道为什么会这样做(我当然没有指定它,也许它是默认设置)。

因为响应是JSON,所以XML反序列化显然会引发错误!

再次感谢。

答案 1 :(得分:1)

嗯,异常消息非常清楚:第1行的语法无效:

<ns0:payload xmlns:ns0="http://www.website.co.za/JSON_Token">

XML应该看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:payload xmlns:ns0="http://www.website.co.za/JSON_Token">
    <ns0:content>
        <ns0:reason>token successfully created</ns0:reason>
        <ns0:success>true</ns0:success>
        <ns0:authDetails>
            <ns0:accessToken>feefaee94822a92ca7f134f74588cc69081b0e94</ns0:accessToken>
            <ns0:expiresIn>604800</ns0:expiresIn>
            <ns0:refreshToken>bc036cba4d346bf76809e143879cb8fb6983940c</ns0:refreshToken>
        </ns0:authDetails>
    </ns0:content>
</ns0:payload>

如果无法更改XML响应的生成方式,则应使用常见的字符串操作预处理XML,因为它是无效的XML,因此无法使用标准工具进行解析。