我使用 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 方法来避免异常吗?
我会很高兴的!