2016-08-25 2 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 " /> 

문제

내가 그것을 행을 반환하지만 내가 유형 'System.OutOfMemoryException'의 예외가 발생 된 것을 말하는 브라우저에 오류를 받고있어 jsonResult에 중단 점을 넣을 때입니다..

을 Heres 컨트롤러에 내 코드

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

나는 또한 결과가 메모리에 앉아되지 않도록 Stream를 사용하려고

UPDATE 여전히 나는 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 행의 목록을 serialize 할 때 System.OutOfMemoryException을 반환합니다. –

+0

많은 양의 데이터가 사용되며 많은 메모리가 사용됩니다. 데이터를 "페이지"할 수 있습니까? –

답변

0

다음을 web.config에 추가하고 이것이 문제를 해결하는지 확인하십시오.

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="52428800" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 
관련 문제