前不久在做一个项目的时候,我用到了mvc的webapi返回了一个大数据,结果报了500错误,如下图所示:
Server Error in ‘/’ Application.
Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. |
Stack Trace:
Version Information: Microsoft .NET Framework Version:2.0.50727.4952; ASP.NET Version:2.0.50727.4955
从上面可以看出错误的原因是对象在JavaScriptSerializer序列化的时候超过了默认的最大限制,所以我们需要一个类来重写JsonResult从而允许更大的数据。
using
System;
using
System.Web.Script.Serialization;
namespace
System.Web.Mvc
{
public
class
LargeJsonResult : JsonResult
{
const
string
JsonRequest_GetNotAllowed =
"This request has been blocked because sensitive information could be disclosed
to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet."
;
public
LargeJsonResult()
{
MaxJsonLength = 1024000;
RecursionLimit = 100;
}
public
int
MaxJsonLength {
get
;
set
; }
public
int
RecursionLimit {
get
;
set
; }
public
override
void
ExecuteResult( ControllerContext context )
{
if
( context ==
null
)
{
throw
new
ArgumentNullException(
"context"
);
}
if
( JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
String.Equals( context.HttpContext.Request.HttpMethod,
"GET"
, StringComparison.OrdinalIgnoreCase ) )
{
throw
new
InvalidOperationException( JsonRequest_GetNotAllowed );
}
HttpResponseBase response = context.HttpContext.Response;
if
( !String.IsNullOrEmpty( ContentType ) )
{
response.ContentType = ContentType;
}
else
{
response.ContentType =
"application/json"
;
}
if
( ContentEncoding !=
null
)
{
response.ContentEncoding = ContentEncoding;
}
if
( Data !=
null
)
{
JavaScriptSerializer serializer =
new
JavaScriptSerializer() { MaxJsonLength = MaxJsonLength, RecursionLimit = RecursionLimit };
response.Write( serializer.Serialize( Data ) );
}
}
}
8420364d-ea0f-4ed0-aba3-a4c69a638d40|3|3.7|27604f05-86ad-47ef-9e05-950bb762570c