2
私が制御できないサードパーティからのJSON応答を取得しています。時々、この応答は文字列の最後に不正な文字を投げます。ここに正しい例があります。デシリアライズする前に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#です。誰もが、私はあなたがServiceNowに接続されている参照
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
しかし、そのエラーは無作為に、時にはそれをスローし、時にはdoesnot、私はその会社の送信よりもCの何かと思います。レコードごとに50,000レコードと85フィールドが得られます。 –