0
我使用Newtonsoft.Json來解析json字符串。C#/ Json.Net異常減緩解析
我解析的數據包含很多entrys,其中幾個屬性的巨大負載是可選的。
的代碼解析如下:
public bool Parse(string JSONString)
{
JObject o;
try
{
jResponse = JObject.Parse(JSONString);
}
catch (JsonReaderException)
{
return false;
}
foreach (JObject jResult in jResponse[ParserConstants.ResultsTag])
{
MyObject myObject = new MyObject();
try
{
myObject.Title = (string)jResult[ParserConstants.TitleTag];
}
catch
{
myObject.Title = String.Empty;
}
// This goes on for like 15 other elements
// Some have a continue in catch, thats when the attribute is mandatory
// Some have a deeper Structure like jResult[Tag1][Tag2][0][Tag3]
Results.Add(c);
}
return (Results != null && Results.Count > 0);
}
所有這一切工作正常,但解析是非常緩慢的,因爲有很多例外的來了,卻未能值的字段。 (這就是我猜)在解析所有數據時有1200個異常。
例外的是以下幾點:
「System.InvalidOperationException」類型的第一次機會異常出現在Newtonsoft.Json.DLL
我tryed這樣的事情,而不是嘗試捕捉:
if(jResult[TitleTag] != null && jResult[TitleTag].HasValues){
myObject.Title = (string) jResult[TitleTag];
} else {
myObject.Title = String.Empty;
}
不幸的是它沒有解決,數據也無法正確解析。
有人可以幫助我一個替代try-catch方法避免例外嗎?
我很高興!
非常感謝工作正常爲止!你有沒有想到我能如何處理更深的結構 - > jResult [Tag1] [Tag2] [0] [Tag3]? – Ostkontentitan 2013-03-21 12:23:27
我想你可以嘗試將一些擴展方法定義爲助手,這樣你就可以編寫像'jResult.TryGet(Tag1).TryGet(Tag2)...'這樣的代碼。擴展方法可以將'null'接受爲'this',這樣就很容易處理沒有你想要的值的情況。 – 2013-03-21 13:36:47