Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从大JSON中提取数据_C#_Json_Json.net - Fatal编程技术网

C# 从大JSON中提取数据

C# 从大JSON中提取数据,c#,json,json.net,C#,Json,Json.net,我们有一个非常大的JSON,接近1500个字段。我们希望读取大部分JSON字段(大多数时候我必须读取整个JSON并获取80%的数据)。什么是性能优化程度最高的方法?我们应该使用JObject.Parse然后使用JsonPath,还是应该使用JsonConvert.DeserializeObject然后使用linq查询,还是有其他更好的方法呢?既然你提到了它是一个大的JSON,我建议你使用一个stram阅读器,这样你就不需要将整个JSON加载到内存中了 using (var reader

我们有一个非常大的JSON,接近1500个字段。我们希望读取大部分JSON字段(大多数时候我必须读取整个JSON并获取80%的数据)。什么是性能优化程度最高的方法?我们应该使用JObject.Parse然后使用JsonPath,还是应该使用JsonConvert.DeserializeObject然后使用linq查询,还是有其他更好的方法呢?

既然你提到了它是一个大的JSON,我建议你使用一个stram阅读器,这样你就不需要将整个JSON加载到内存中了

    using (var reader = new JsonTextReader(new StreamReader(stream)))
    {
        while(!(reader.TokenType.Equals(JsonToken.EndObject) && reader.Depth == 0))
        {
            if (reader.TokenType.Equals(JsonToken.PropertyName))  
                 if (!DoSomething(reader))
                    break;
            if (!reader.Read())
                break;
        }
    }
例如,在
DoingSomething
方法中,可以从一个字段读取值

    private bool DoSomething(JsonTextReader reader)
    {
        if(reader.Path.Equals("FieldName_You_Are_Looking_For"))
        {
            string jsonText = JsonTextReaderToJsonText(reader);
            // Do something to read the value
        }
        // return true to continue reading, return false to stop reading
        return true;
    }

希望它能帮助你

看起来你已经知道了一些选项,为什么不试试它们,用秒表测量时间,找到最有效的方法呢?也许这个链接会对你有帮助,谢谢刘建平,大多数时候我必须阅读整个JSON,并获得80%的数据内存,流读取器比将整个数据加载到内存中效率更高。我看到的唯一限制是,我需要为检查每个路径添加这么多If条件。是否有更好的路径检查和检索方法