JavaScriptSerializer.MaxJsonLength exceeded. What's the best practice for handling this?

42,265

Solution 1

The only way to set the maximum length for web methods that are called from client script is through the web.config file (below). What is your issue with setting this? I would do this every time over multiple xhr calls to stream parts of the data.

<system.web.extensions>
  <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="500000">
        </jsonSerialization>
      </webServices>
  </scripting>
</system.web.extensions>

UPDATE: The default size is 2097152 which is equivalent to 4 MB of Unicode string data. Are you really going to send that much data back to the client? If so ouch and you prob need to look at the app design as the user experience will be slow and cumbersome.

Solution 2

2147483647 is the correct value to use. Just to avoid confusion in the code you can use something like

var JsonSerializer = new JavaScriptSerializer();
JsonSerializer.MaxJsonLength = Int32.MaxValue;

Solution 3

The maximum value for this property is 2147483647 according to this forum post.

I've not spent any time optimizing the data I return, yet (I'll do that before anyone sees it) - but with this value set, IE has started giving me the 'a script on the page is taking too long do you want to kill it' message.

A solution would be to chunk the data - does anyone know of a nice way to do this (in jQuery ideally)? I could just do another ajax call in the success handler, of course.

Solution 4

The maximum allowed length is the maximum value an Integer can hold which happens to be - 2147483647

Share:
42,265
Tim Scarborough
Author by

Tim Scarborough

Updated on October 04, 2020

Comments

  • Tim Scarborough
    Tim Scarborough over 3 years

    I've got a large amound of data I'm sending down to the client using jQuery's $.ajax() function. I'm calling a method in a ASP.NET web service that returns the JSON data. Everything is great for most searches, but when I've got a large data set to return I run into a issue with the JavaScriptSerializer MaxJsonLength property. What's the best practice for handling this? I don't want to just arbitrarily set a max length. Can I set the MaxJsonLength in the web service if the data being returned is larger than the current max or should I re-write and send down chucks of data to the client?

    Here's the relevant snippet from the web service:

    Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>();
    //add some data to the dictionary...
    return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs);
    
  • Tim Scarborough
    Tim Scarborough almost 15 years
    I've got no issue setting a max length in web.config. I was wondering if this is the best practice. I want to protect myself from cases where there may be more data than the max length I specify.
  • redsquare
    redsquare almost 15 years
    ah your question stated "I don't want to just arbitrarily set a max length" which I assumed you meant in the web.config.
  • Tim Scarborough
    Tim Scarborough almost 15 years
    Sorry for the confusion. I don't know the max size my data might be. I think I'll look into not using the JavascriptSerializer object.
  • Terry
    Terry over 11 years
    I had to change this value and my data was only 100KB. So I don't think the default is 4MB.