2016-08-25 24 views
0

JsonDataの大きなセットを処理する方法は?
私が返すデータには、200k +行が含まれています。MVCで大量のJsonデータを処理する方法は?

すでにWeb設定ファイルをffに設定しています。

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

Iveもキーを追加しました。

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

問題

は、私はそれが行を返しますが、私は型「System.OutOfMemoryExceptionに」の 例外がスローされたことを言って、ブラウザ上でエラーを取得しています化するJsonResult上のブレークポイントを置くときです。

私も結果はまだ私は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); 

      } 
を得ているメモリに座ってしないように Streamを使用しようとしたコントローラ

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

UPDATE

の相続人は私のコード

私はまた、ここの答えに基づいてこのコードを追加しました。

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 returiningのがありますか? –

+0

ええJSON.Netを試してみましたが、200k行のリストをシリアライズするとSystem.OutOfMemoryExceptionが返されます –

+0

これは大量のデータであり、多くのメモリが使用されることになります。データを「ページング」する能力はありますか? –

答えて

0

これをweb.configに追加し、問題が解決するかどうかを確認してください。

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="52428800" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 
関連する問題