2015-08-14 44 views
2
XML文档

我试图用RestSharp反序列化下面的XML响应:错误反序列化使用RestSharp

<?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.

任何想法我做错了什么?

+0

开始时是否有[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)?请参阅[这里](http://stackoverflow.com/q/19663100/5045688)。 –

+0

我冒昧地编辑你的问题的标题,因为你似乎知道*如何做到这一点,只有你这样做的时候出现错误.. – helb

回答

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,因此无法使用标准工具进行分析。

2

感谢所有的答复。

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

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

再次感谢。