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