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个字段。 –