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?
在使用ScriptMethod屬性和靜態方法(不使用非靜態Serialize方法)使數據可用於JavaScript時,此響應特別有用。謝謝! – markau