2015-08-14 56 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反序列化顯然會引發錯誤!

再次感謝。