2014-01-14 2 views
3

저는 아약스와 함께 엔티티를 사용하고 있습니다. JavaScript로 만든 그리드에서 Entity 프레임 워크를 사용하여 전체 테이블을 만들고 싶습니다. 현재 제가 보내고있는 테이블은 140 라인 미만입니다. 내 네트워크 통계에서문자열이 maxJsonLength를 초과합니다 (250KB 미만)

{"Message":"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.","StackTrace":" at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, StringBuilder output, SerializationFormat serializationFormat)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, SerializationFormat serializationFormat)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"} 

내가 오류 등이 응답 본문 내 XMLHttpRequest를위한 500 오류 : 만 테이블에 50 줄 나는 다음과 같은 오류가 몇 가지 더이있는 경우 내 코드가 작동 위에 표시된. 라인 수를 50 개로 제한하면 페이지가 제대로 작동하고 응답 본문에서 데이터를 볼 수 있습니다. 다음 코드는 엔티티에서 자바 스크립트로 데이터를 전송하는 데 필요한 모든 코드입니다. 자바 스크립트 :

$(function() { 
    $.ajax({ 
     url: "EditFeedApac.aspx/GetApacData", 
     type: "POST", 
     contentType: "application/json", 
     success: function (result) { 
      console.log(result.d); 
     }, 
     error: showError 
    }); 
}); 

C 번호 오류를 볼 수있는

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public static IEnumerable<PreApacData> GetApacData() 
{ 
    var a = new Towers_WatsonEntities().tbl_TowersWatson_preAPAC.ToList(); 
    Mapper.CreateMap<tbl_TowersWatson_preAPAC, PreApacData>(); 
    var newData = a.Select(Mapper.Map<tbl_TowersWatson_preAPAC, PreApacData>).ToList(); 
    return newData; 
} 

명확 MaxJsonLength이 최대 값으로 설정되지 않은 나타냅니다.

var serializer = new JavaScriptSerializer(); 
serializer.MaxJsonLength = Int32.MaxValue; 
string test = serializer.Serialize(newData); 
return test; 

는 이제 MaxJsonLength가 방금 제한을 위해, 4메가바이트의 크기가 될 수 다음 GetApacData() 함수에서 는 다음 코드를 추가했습니다. 이 속성을 설정하면 여전히 동일한 serialization 오류가 발생합니까? 여기서 내가 뭘 잘못하고 있니? JavaScript로 내 데이터를 보내려면 어떻게해야합니까?

답변

7

는 Apperently 당신의

serializer.MaxJsonLength = Int32.MaxValue; 

덮어 쓰기됩니다

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

하여 구성 파일을 변경하려고합니다.

+1

이 응답은 ScriptMethod 특성과 정적 메서드 (비 정적 Serialize 메서드 사용을 배제하는)를 사용하여 JavaScript에서 데이터를 사용할 수있는 경우 특히 유용합니다. 고맙습니다! – markau