当json结果中的字符长度很大时,将引发以下异常:
使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过maxJsonLength属性上设置的值。
上面的异常是一个服务器端异常,有500个响应代码,因此如果我们将源代码放在try catch块中,那么错误应该在catch块中捕获,但try catch对这种情况不起作用。
您可以通过以下代码测试此问题,请在asp.net mvc控制器中使用它:
public JsonResult Test()
{
try
{
var result = "";
var v1 = new JavaScriptSerializer();
for (int i = 0; i < (v1.MaxJsonLength / 100) + 10; i++)
{
result += "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
}
//exception message:
//Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
return Json(result, JsonRequestBehavior.AllowGet);
}
catch
{
//when exception is raised the catch will not be called
return null;
}
}
答案 0 :(得分:4)
我无法重现错误,但无论如何,发生的事情是Json
方法实现已在内部捕获异常并将其转换为完整的HTTP 5xx响应。 return Json()
来电没有例外。
你没有机会抓住这个例外,因为......你会怎么做?生成HTTP 5xx响应?这已经由MVC框架为您完成了。
答案 1 :(得分:-2)
试试这样:
ActionResult result;
try
{
var result = "";
var v1 = new JavaScriptSerializer();
for (int i = 0; i < (v1.MaxJsonLength / 100) + 10; i++)
{
result += "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
}
//exception message:
//Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
result= Json(result, JsonRequestBehavior.AllowGet);
}
catch
{
//when exception is raised the catch will not be called
}
return result;