c# / Json.Net exception减慢解析速度

本文关键字:速度 exception Json Net | 更新日期: 2023-09-27 18:05:09

我用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个异常。

例外情况如下:

系统类型的第一次异常。InvalidOperationException'发生在Newtonsoft.Json.DLL

我尝试了这样的东西,而不是try catch:

if( jResult[TitleTag] != null && jResult[TitleTag].HasValues ){
    myObject.Title = (string) jResult[TitleTag];
} else {
    myObject.Title = String.Empty;
}

不幸的是,它没有工作和数据不能正确解析。

谁能帮我一个替代尝试捕获方法避免异常?

我很高兴!

c# / Json.Net exception减慢解析速度

JObjectIDictionary<string, JToken>一样工作,所以在它上面有一个TryGetValue方法:

JToken token;
if (jResult.TryGetValue(TitleTag, out token)) {
    myObject.Title = (string)token;
} else {
    myObject.Title = String.Empty;
}