2017-03-08 153 views
-1

我们有一个非常大的JSON,接近1500个字段。我们希望阅读大部分JSON字段(大部分时间我必须阅读整个JSON并获得80%的数据)。什么可能是性能最优化的方式?我们应该使用JObject.Parse,然后使用JsonPath,或者我们应该使用JsonConvert.DeserializeObject,然后使用linq查询或有没有其他更好的方法从大JSON提取数据

+0

它看起来像你已经意识到一些选择,为什么你不会尝试它们,并使用秒表来衡量时间,以找到最高性能的方式? –

+0

可能是这个链接将有助于你http://stackoverflow.com/questions/4611031/convert-json-string-to-c-sharp-object –

回答

1

既然你提到它是一个大的JSON,我会建议你使用stram reader所以你不需要整个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; 
    } 

希望它可以帮助你

+0

谢谢刘建平,大部分时间我必须读整个JSON并获得80%的数据 – user3615869

+0

内存明智,流读取器比加载整个数据到内存更有效率。 –

+0

唯一的限制,我看到我需要添加这么多如果条件检查每个路径任何更好的路径检查和检索 – user3615869