2017-03-08 166 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