繁体   English   中英

C#/ Json.Net异常减慢了解析速度

[英]C#/Json.Net Exceptions slowing down parsing

我使用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;
}

不幸的是,它没有解决,并且数据无法正确解析。

有人可以通过尝试捕获方法的替代方法来帮助我,避免出现异常情况吗?

我会很高兴!

JObject用作IDictionary<string, JToken>因此上面有一个TryGetValue方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM