【问题标题】:Error while deserializing an XML document using RestSharp使用 RestSharp 反序列化 XML 文档时出错
【发布时间】:2015-11-07 19:40:46
【问题描述】:

我正在尝试使用 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);

这是我得到的错误:

“System.Xml.XmlException”类型的未处理异常发生在 System.Xml.dll 附加信息:根级别的数据是 无效的。第 1 行,位置 1。

任何想法我做错了什么?

【问题讨论】:

  • 开头有BOM吗?见here
  • 我冒昧地编辑了您的问题的标题,因为您似乎知道 如何 这样做,只有您在这样做时遇到错误..

标签: c# xml restsharp xml-deserialization


【解决方案1】:

感谢所有回复。

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

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

再次感谢。

【讨论】:

    【解决方案2】:

    嗯,异常信息很清楚:第 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,因此无法使用标准工具进行解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多