2016-08-25 71 views
0

如何處理大量的JsonData?
我返回的數據包含200k +行。如何在MVC中處理大量的Json數據?

我已經將網絡配置文件設置爲ff。

<system.web.extensions> 
    <scripting> 
     <webServices> 
      <jsonSerialization maxJsonLength="50000000"/> 
     </webServices> 
    </scripting> 
</system.web.extensions> 

我也加了鑰匙。

<add key="aspnet:MaxJsonDeserializerMembers" value="2147483647 " /> 

問題是,當我穿上jsonResult一個破發點,返回的行,但我在瀏覽器上得到一個錯誤,說類型「System.OutOfMemoryException的」的引發異常。

我的繼承人在控制器上的代碼

var jsonResult = Json(listofParticipant); 
    jsonResult.MaxJsonLength = int.MaxValue; 
    jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
    return jsonResult; 

UPDATE

我還試圖用Stream,這樣的結果不會在內存中坐以待斃我越來越OutOfMemoryException

using (StreamWriter sw = new StreamWriter(@"D:\json.txt")) 
      { 
       using (JsonWriter writer = new JsonTextWriter(sw)) 
       { 
        JsonSerializer serializer = new JsonSerializer(); 
        serializer.Serialize(writer, listofParticipant); 
       } 
      } 

      var xserializer = new JsonSerializer(); 

      using (var sr = new StreamReader(@"D:\json.txt")) 
      using (var jsonTextReader = new JsonTextReader(sr)) 
      { 
       var xx = xserializer.Deserialize<List<PatricipantSearchViewModel>>(jsonTextReader); 
       return Json(xx, "application/json", Encoding.Default, JsonRequestBehavior.AllowGet); 

      } 

我也根據這裏的答案添加了這個代碼。

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior) 
{ 
    return new JsonResult() 
    { 
     Data = data, 
     ContentType = contentType, 
     ContentEncoding = contentEncoding, 
     JsonRequestBehavior = behavior, 
     MaxJsonLength = Int32.MaxValue 
    }; 
} 
+0

您是否嘗試過使用JSON.Net或StackOverflow的JSON解串器而不是返回JsonResult嘗試返回文本? –

+0

是的,我已經嘗試過JSON.Net,但是當序列化200k行的列表時仍然返回System.OutOfMemoryException –

+0

這是很多數據,並且最終會導致大量內存使用。你有能力「分頁」數據嗎? –

回答

0

在web.config中添加以下內容,看看是否可以解決您的問題。

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="52428800" /> 
     </requestFiltering> 
    </security> 
</system.webServer>