2014-01-14 67 views
3

我與ajax一起使用實體。我想要一個完整的表格,並使用JavaScript創建的實體框架ina網格。我目前發送的表格少於140行。我的代碼工作,如果我只有在表50行數更多的我得到以下錯誤:字符串超過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"} 

在我的網絡統計數據,我得到一個500錯誤我會在迴應主體的XMLHttpRequest我有誤差如上所示。如果我將行數限制爲50,則可以使頁面正常工作,並且可以在響應主體中看到我的數據。以下代碼是將數據從實體發送到JavaScript所需的所有代碼。 的JavaScript:

$(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尚未設置爲最大值。 在GetApacData()函數中添加以下代碼:

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

現在MaxJsonLength可能成爲4MB的大小,只是起飛的極限。 有了這個屬性集,我仍然得到相同的序列化錯誤? 我在這裏做錯了什麼? 如何將我的數據發送到我的JavaScript?

回答

7

嘗試通過

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

Apperently您

serializer.MaxJsonLength = Int32.MaxValue; 

被覆蓋更改配置文件。

+1

在使用ScriptMethod屬性和靜態方法(不使用非靜態Serialize方法)使數據可用於JavaScript時,此響應特別有用。謝謝! – markau

相關問題