Thursday, March 12, 2015
Vikas Sharma
Whilst creating a JsonResult for my web service in ASP.NET
MVC I received a deserialisation error of type
"InvalidOperationException" with the description "Error during
serialization or deserialization using the JSON JavaScriptSerializer.
The length of the string exceeds the value set on the maxJsonLength
property."
In fairness I was sending quite a large JSON object at the time,
largely due to there being 288 base64 embedded images totally ~15MB I'd
guess... Whoops! Anyway, it may be a hilariously large amount of data
but it is what I want so how to work around this?...
There is a web config setting that can resolve this which was my first discovery in my path to success:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="1000000000" />
</webServices>
</scripting>
</system.web.extensions>
This is the official word from Microsoft about this but unfortunately
this only works when you are specifically serialising (or deserialising)
things yourself. This has no relation on the inner workings of the
framework such as my bit of MVC code which is currently as follows:
public JsonResult GetData()
{
return Json(GetCrazyAmountOfJson(), JsonRequestBehavior.AllowGet);
}
So for those of you using the Json() method in ASP.NET MVC or some other
similar .NET framework voodoo like me the work around is to write your
own code and bypass the framework such as:
public ContentResult GetData()
{
var data = GetCrazyAmountOfJson();
var serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = int.MaxValue;
var result = new ContentResult();
result.Content = serializer.Serialize(data);
result.ContentType = "application/json";
return result;
}
The MaxJsonLength is an Int32 so the maximum length can only be the
maximum int value (1.4billion or something), you cannot make it
unlimited. I assume this limit is here to make you think twice before
making crazy big JSON serlisations. Did it?
0 comments:
Post a Comment