我試圖消耗第三方web服務。我製作一個請求消息,將其發送到httpclient並接收httpResponseMessage。HttpResponseMessage失敗反序列化XML,但FILESTREAM是罰款
下面是從該處理呼叫的方法的一個片段。對我的情況xml = true。
運行此代碼後,嘗試反序列化流中的XML數據時會引發錯誤。它失敗並出現錯誤「根級別的數據無效」。
我註釋掉XMLMediaTypeFormatter和response.Content.Read ...以及與此
var fileStream = File.Create("D:\\Extract\\test.txt");
await response.Content.CopyToAsync(fileStream);
fileStream.Close();
其寫出有效的XML文件替換它。
在即時窗口,我跑response.Content.ReadAsStringAsync()返回的字符串值具有額外的反斜槓逃逸的內容。
例如,這是什麼,是在生成的test.txt文件:
<?xml version="1.0" encoding="utf-8"?>
,這是從ReadAsStringAsync:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
我相信這是什麼原因造成的反序列化失敗。有沒有一個乾淨的解決方案,或者我在其他地方做錯了什麼?
'<?XML版本= \ 「1.0 \」 編碼= \ 「UTF-8 \」?>'我猜你看這是什麼,當你在調試器中查看字符串的內容?如果是,那麼它看起來是正確的。調試器顯示轉義格式的字符串,因爲調試器允許您更改變量的值。所以,如果你要改變你的字符串,你需要以它在代碼中出現的相同形式輸入它。所以這不會是你的問題的原因。另外,BOM(如果存在)不應該導致xml解析器失敗。 – LB2
是的,這就是我在ReadAsStringAsync()之後的字符串內容中看到的內容。我對BOM沒有把握,儘管另一個SO問題表明BOM破壞了他們的反序列化器,並且在反序列化之前扔掉了流的第一個字節。 –
我不知道閱讀文件是否會拋棄BOM,這就是爲什麼它可以工作。首先嚐試將其讀入字符串緩衝區,然後在調試器中查看結果字符串是否包含BOM(或可能存入內存緩衝區,並檢查第一對字節以查看它們是否爲BOM)? – LB2