2
我得到了來自我無法控制的第三方的JSON響應。有時候這個響應會在字符串的末尾拋出非法字符。這是一個正確的例子。在C#反序列化之前從JSON字符串中刪除非法字符
{
"result": [
{
"parent": "",
"made_sla": "true",
"caused_by": "",
"watch_list": "",
"upon_reject": "cancel",
"sys_updated_on": "2016-09-13 19:00:01",
"approval_history": "",
"category": "SPIN Station"
}
]
}
錯誤字符串的示例。在這裏你可以看到最後它會拋出額外的逗號而不是關閉。
{
"result": [
{
"parent": "",
"made_sla": "true",
"caused_by": "",
"watch_list": "",
"upon_reject": "cancel",
"sys_updated_on": "2016-09-13 19:00:01",
"approval_history": "",
"category": "SPIN Station"
}
],
這是我在c#中的代碼。誰能告訴下面的反序列化
WebRequest req = WebRequest.Create(@"https://aaaa.service-now.com/api/now/table/incident?sysparm_query=sys_updated_onBETWEENjavascript:gs.dateGenerate('2016-09-10','00:00:00')@javascript:gs.dateGenerate('2016-09-13','23:59:59')");
req.Method = "GET";
req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("username:Password"));
req.ContentType = "application/xml";
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
var responseValue = string.Empty;
using (var responseStream = resp.GetResponseStream())
{
if (responseStream != null)
using (var reader = new StreamReader(responseStream))
responseValue = reader.ReadToEnd();
}
JavaScriptSerializer ser = new JavaScriptSerializer();
ser.MaxJsonLength = 2147483647;
ser.RegisterConverters(new List<JavaScriptConverter> { new ResultConverter() });
RootObject ro = ser.Deserialize<RootObject>(responseValue);
第1步是嚴厲打擊那些給你不良數據的公司,以解決他們的問題。如果他們沒有構建正確的JSON,那麼他們很可能會手動構建字符串,所以很可能他們也會搞砸其他JSON規則,這是您無法預測或解決的。 –
你確定你沒有得到部分味精嗎? – Plutonix
但是,這個錯誤是隨機的,有時它會拋出,有時不會,我認爲它與C#的東西比公司發送的東西。每條記錄我們可以獲得50,000條記錄和85個字段。 –