jQuery의 자동 완성 기능을 사용하고 있습니다. 17000 개 이상의 레코드 목록을 검색하려고하면 (각 문자의 길이는 10 자 이하 여야 함) 길이를 초과하여 오류가 발생합니다.
예외 정보 :
예외 유형 : InvalidOperationException
예외 메시지 : JSON JavaScriptSerializer를 사용한 직렬화 또는 역 직렬화 중에 오류가 발생했습니다. 문자열의 길이가 maxJsonLength 특성에 설정된 값을 초과합니다.
나는에 대한 길이 제한을 설정할 수 maxJsonLength
있는 web.config
? 그렇지 않은 경우 설정할 수있는 최대 길이는 얼마입니까?
답변
참고 : 이 답변은 웹 서비스에만 적용됩니다 .Controller 메서드에서 JSON을 반환하는 경우 https://stackoverflow.com/a/7207539/1246870 아래 에서이 SO 답변을 읽으십시오.
MaxJsonLength 속성이 제한 될 수 없다, 정수 속성입니다 기본값 102,400 (100,000).
MaxJsonLength
web.config 에서 속성을 설정할 수 있습니다 .
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
답변
MVC 4를 사용 하는 경우이 답변 도 확인하십시오 .
여전히 오류가 발생하는 경우 :
maxJsonLength
web.config에서 속성을 최대 값으로 설정 한 후- 데이터 길이가이 값보다 작다는 것을 알고 있습니다.
- JavaScript 직렬화에 웹 서비스 방법을 사용하지 않습니다
당신의 문제는 다음과 같습니다.
MaxJsonLength 속성 값은 웹 서비스 메서드를 호출하기 위해 비동기 통신 계층에서 사용하는 내부 JavaScriptSerializer 인스턴스에만 적용됩니다. ( MSDN : ScriptingJsonSerializationSection.MaxJsonLength 속성 )
기본적으로 “내부” JavaScriptSerializer
는maxJsonLength
는 웹 메소드에서 호출 될 때 . JavaScriptSerializer
(또는 MVC action-method / Controller를 통한 사용)의 직접적인 사용은 적어도 web.config 의 섹션이 아닌 속성을 존중 하지 않습니다 .maxJsonLength
systemWebExtensions.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);
잘 작동합니다.