[asp.net] web.config에서 maxJsonLength의 길이를 무제한으로 설정할 수 있습니까?

jQuery의 자동 완성 기능을 사용하고 있습니다. 17000 개 이상의 레코드 목록을 검색하려고하면 (각 문자의 길이는 10 자 이하 여야 함) 길이를 초과하여 오류가 발생합니다.

예외 정보 :
예외 유형 : InvalidOperationException
예외 메시지 : JSON JavaScriptSerializer를 사용한 직렬화 또는 역 직렬화 중에 오류가 발생했습니다. 문자열의 길이가 maxJsonLength 특성에 설정된 값을 초과합니다.

나는에 대한 길이 제한을 설정할 수 maxJsonLength있는 web.config? 그렇지 않은 경우 설정할 수있는 최대 길이는 얼마입니까?



답변

참고 : 이 답변은 웹 서비스에만 적용됩니다 .Controller 메서드에서 JSON을 반환하는 경우 https://stackoverflow.com/a/7207539/1246870 아래 에서이 SO 답변을 읽으십시오.


MaxJsonLength 속성이 제한 될 수 없다, 정수 속성입니다 기본값 102,400 (100,000).

MaxJsonLengthweb.config 에서 속성을 설정할 수 있습니다 .

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


답변

MVC 4를 사용 하는 경우이 답변 도 확인하십시오 .


여전히 오류가 발생하는 경우 :

  • maxJsonLengthweb.config에서 속성을 최대 값으로 설정 한 후
  • 데이터 길이가이 값보다 작다는 것을 알고 있습니다.
  • JavaScript 직렬화에 웹 서비스 방법을 사용하지 않습니다

당신의 문제는 다음과 같습니다.

MaxJsonLength 속성 값은 웹 서비스 메서드를 호출하기 위해 비동기 통신 계층에서 사용하는 내부 JavaScriptSerializer 인스턴스에만 적용됩니다. ( MSDN : ScriptingJsonSerializationSection.MaxJsonLength 속성 )

기본적으로 “내부” JavaScriptSerializermaxJsonLength 는 웹 메소드에서 호출 될 때 . JavaScriptSerializer(또는 MVC action-method / Controller를 통한 사용)의 직접적인 사용은 적어도 web.config 의 섹션이 아닌 속성을 존중 하지 않습니다 .maxJsonLengthsystemWebExtensions.scripting.webServices.jsonSerialization

이 문제를 해결하기 위해 Controller 내에서 (또는 실제 어디에서나) 다음을 수행 할 수 있습니다.

var serializer = new JavaScriptSerializer();

// For simplicity just use Int32's max value.
// You could always read the value from the config section mentioned above.
serializer.MaxJsonLength = Int32.MaxValue;

var resultData = new { Value = "foo", Text = "var" };
var result = new ContentResult{
    Content = serializer.Serialize(resultData),
    ContentType = "application/json"
};
return result;

이 답변은 이 asp.net 포럼 답변에 대한 나의 해석입니다 .


답변

MVC 4에서는 다음을 수행 할 수 있습니다.

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
    };
}

컨트롤러에서.

부가:

지정해야하는 매개 변수에 당황한 사람은 다음과 같이 호출 할 수 있습니다.

Json(
    new {
        field1 = true,
        field2 = "value"
        },
    "application/json",
    Encoding.UTF8,
    JsonRequestBehavior.AllowGet
);


답변

web.config 파일에서 json 요청의 최대 길이를 구성 할 수 있습니다.

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

maxJsonLength의 기본값은 102400 입니다. 자세한 내용은 다음 MSDN 페이지를 참조하십시오. http://msdn.microsoft.com/en-us/library/bb763183.aspx


답변

다음과 같이 web.config 설정 후에도 여전히 오류가 발생하는 경우

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

나는 다음과 같이 해결했다.

   public ActionResult/JsonResult getData()
   {
      var jsonResult = Json(superlargedata, JsonRequestBehavior.AllowGet);
      jsonResult.MaxJsonLength = int.MaxValue;
      return jsonResult;
    }

이것이 도움이되기를 바랍니다.


답변

ASP.NET Web Forms 에서이 문제가 발생했습니다. web.config 파일 설정을 완전히 무시했기 때문에 다음과 같이했습니다.

        JavaScriptSerializer serializer = new JavaScriptSerializer();

        serializer.MaxJsonLength = Int32.MaxValue;

        return serializer.Serialize(response);

물론 이것은 전반적으로 끔찍한 연습입니다. 웹 서비스 호출로이 많은 양의 데이터를 전송하는 경우 다른 접근법을 살펴 봐야합니다.


답변

나는 그것을 고쳤다.

//your Json data here
string json_object="........";
JavaScriptSerializer jsJson = new JavaScriptSerializer();
jsJson.MaxJsonLength = 2147483644;
MyClass obj = jsJson.Deserialize<MyClass>(json_object);

잘 작동합니다.