Newtonsoft.Jsonを使用してjson文字列を解析します。
私が解析しているデータには多くのエントリが含まれていますが、それらのいくつかはオプションです。
解析のコードは次のようになります。
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の例外のようなものがあります。
例外は次のとおりです。
Newtonsoft.Json.DLLでタイプ「System.InvalidOperationException」の最初のチャンスの例外が発生しました
try catchの代わりに次のようなものを試しました:
if( jResult[TitleTag] != null && jResult[TitleTag].HasValues ){
myObject.Title = (string) jResult[TitleTag];
} else {
myObject.Title = String.Empty;
}
残念ながら、それはうまくいかず、データを適切に解析できませんでした。
誰かが例外を回避するtry-catchアプローチの代替案を手伝ってくれるでしょうか?
嬉しいです!