I am using the autocomplete feature of jQuery. When I try to retrieve the list of more then 17000 records (each won't have more than 10 char length), it's exceeding the length and throws the error:

Exception information:
Exception type: InvalidOperationException
Exception message: Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.

Can I set an unlimited length for maxJsonLength in web.config? If not, what is the maximum length I can set?

1 upvote
  flag
Something to mention which may be pretty obvious so please excuse me if you've already thought if it; the Json string also includes the curly brackets around each record, the quotation marks around each field name [and value], as well as the field name and value. So it may be useful to set the field name as a single character and also make sure that if the value is not a string, that you set the field type correctly so it doesn't contain quotation marks. – MichaelJTaylor

25 Answers 11

up vote 593 down vote accepted

NOTE: this answer applies only to Web services, if you are returning JSON from a Controller method, make sure you read this SO answer below as well: //allinonescript.com/a/7207539/1246870


The MaxJsonLength property cannot be unlimited, is an integer property that defaults to 102400 (100k).

You can set the MaxJsonLength property on your web.config:

<configuration> 
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="50000000"/>
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration> 
126 upvote
  flag
It is an integer so the max value you can set is: 2147483644 – David Espart
51 upvote
  flag
@despart: You mean 2 147 483 647. – Dercsár
6 upvote
  flag
@kmcc049, IMO the values aren't wrong because if you look at the question, the OP is not asking "what's the default value of maxJsonLength?" (BTW, the second most voted answer is answering this, wrong question), he's trying to set this property to "unlimited", but since is an Integer, the maximum value possible is 2147483647 as @depsart and @Descár point out. – CMS
11 upvote
  flag
Great but note @David Murdoch's answer below if you're having this problem when using MVC's return Json() or something – BritishDeveloper
2 upvote
  flag
@ Dercsár: whats the point? 2147483644 is the biggest integer perfectly divisible by 1024. – naveen
upvote
  flag
Unfortunately this way doesn't work for asp.net mvc. (weblogs.asp.net/rashid/archive/2009/03/23/…). You need to rewrite JsonResult for fix. – RredCat
1 upvote
  flag
this doesnt work for me! – Taha Rehman Siddiqui
upvote
  flag
@MirceaChirea - reminiscent of that famous misattributed Bill Gates quote: "640K ought to be enough for anybody!" – Shaul Behr
upvote
  flag
Thanks mate! Really appreciate this. My Web.Config is full of settings at max sizes – Pierre
upvote
  flag
This resolved my issue when using an aspx "Page Method" which are the static methods decorated with a [WebMethod] attribute. – Randy Burden
upvote
  flag
I have this problem in the model binding of JSON to an array of objects. If I am to believe Chrome, the content-length is 2962693. So, no way my JSON was longer that 2147483644 that I specified in the CONFIG. So, this doesn't work for my case either. :( – user2173353
upvote
  flag
thanks, It solved my problem – shady sherif
upvote
  flag
I have set the value 2147483644 in web.config but it is still giving me error of serialization. – Amol
upvote
  flag
The MSDN page says it's limited to 2097152 (4MB) not 102400. Has it been changed ? – tigrou
upvote
  flag
@naveen 2 147 482 624 (=2^31 - 1024) is the biggest integer perfectly divisible by 1024. Your 2 147 483 644 (= 2^31 - 4) leaves a rest of 1020 (so it is only perfectly divisible by 4). – MilConDoin
upvote
  flag
Didn't work? Try this instead: //allinonescript.com/a/10969382/3520070 – AndrewRalon

You can configure the max length for json requests in your web.config file:

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

The default value for maxJsonLength is 102400. For more details, see this MSDN page: http://msdn.microsoft.com/en-us/library/bb763183.aspx

1 upvote
  flag
What is the stored value in this integer representing? Is this some sort of count of character? I guess what I am asking is, why an integer is being used? Thanks! – eaglei22
upvote
  flag
@eaglei22 the number represents how many bytes can be used for the maxJsonLength. As M4N mentioned, 102400 is the default (100KB). – Jacob Plonke

The question really is whether you really need to return 17k records? How are you planning to handle all the data in the browser? The users are not going to scroll through 17000 rows anyway.

A better approach is to retrieve only a "top few" records and load more as needed.

upvote
  flag
The default list from json will give 17k records. But the autocomplete feature will list only the records that matches the characters that the user types, thus it wont need to scroll the list more. SO what i need is to set unlimited length for maxJsonLength which can serialize the 17k data. – Prasad
6 upvote
  flag
You could use a combination of server and client side filtering. It could be hard to filter all the data on the client side, not to mention the network latency. – Chetan Sastry
1 upvote
  flag
Having arrived at this same issue a while back, I chose to implement an "onsearch" handler for the autocomplete, and have the web service call pass the "search" text and do a Top10 query using the search criteria as a filter. This meant more individual ajax requests, that just getting the full list on page load, but it also meant that all the requests/responses were much smaller. – Mike U

It appears that there is no "unlimited" value. The default is 2097152 characters, which is equivalent to 4 MB of Unicode string data.

As as already been observed, 17,000 records are hard to use well in the browser. If you are presenting an aggregate view it may be much more efficient to do the aggregation on the server and transfer only a summary in the browser. For example, consider a file system brower, we only see the top of the tree, then emit further requestes as we drill down. The number of records returned in each request is comparatively small. A tree view presentation can work well for large result sets.

3 upvote
  flag
rather bizarrely the default in code (new JavaScriptSerializer()).MaxJsonLength is 2097152 bytes but the web service ResponseFormatJson is the 102400 bytes unless explicitly set. – rob

if, after implementing the above addition into your web.config, you get an “Unrecognized configuration section system.web.extensions.” error then try adding this to your web.config in the <ConfigSections> section:

            <sectionGroup name="system.web.extensions" type="System.Web.Extensions">
              <sectionGroup name="scripting" type="System.Web.Extensions">
                    <sectionGroup name="webServices" type="System.Web.Extensions">
                          <section name="jsonSerialization" type="System.Web.Extensions"/>
                    </sectionGroup>
              </sectionGroup>
        </sectionGroup>
4 upvote
  flag
I was having this problem. However, this answer did not work for me. Instead of adding the <sectionGroup> element described here, I just moved the whole newly added <system.web.extensions> block to the very end of my web.config... right before </configuration>. Then it worked. – ClearCloud8
upvote
  flag
This helped, but in my situation I needed to change your fourth line to <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSec‌​tion, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>, as seen on this page: forums.asp.net/t/1446510.aspx/1 – Nathan
upvote
  flag
@ClearCloud8 Get that comment spread across this page immediately. – Jack Nutkins

If you are using MVC 4, be sure to check out this answer as well.


If you are still receiving the error:

  • after setting the maxJsonLength property to its maximum value in web.config
  • and you know that your data's length is less than this value
  • and you are not utilizing a web service method for the JavaScript serialization

your problem is is likely that:

The value of the MaxJsonLength property applies only to the internal JavaScriptSerializer instance that is used by the asynchronous communication layer to invoke Web services methods. (MSDN: ScriptingJsonSerializationSection.MaxJsonLength Property)

Basically, the "internal" JavaScriptSerializer respects the value of maxJsonLength when called from a web method; direct use of a JavaScriptSerializer (or use via an MVC action-method/Controller) does not respect the maxJsonLength property, at least not from the systemWebExtensions.scripting.webServices.jsonSerialization section of web.config.

As a workaround, you can do the following within your Controller (or anywhere really):

var serializer = new JavaScriptSerializer();

// For simplicity just use Int32's max value.
// You could always read the value from the config section mentioned above.
serializer.MaxJsonLength = Int32.MaxValue;

var resultData = new { Value = "foo", Text = "var" };
var result = new ContentResult{
    Content = serializer.Serialize(resultData),
    ContentType = "application/json"
};
return result;

This answer is my interpretation of this asp.net forum answer.

4 upvote
  flag
Your answer was really helpful as I am using the Json() action result method in asp.net mvc. – jessegavin
3 upvote
  flag
Yep I was a Json() suffer too. Thanks! – BritishDeveloper
3 upvote
  flag
Although it is completely correct and deserving of its place, this is one of those questions where it's worth reading past the top answer :). Thanks! – Nigel
1 upvote
  flag
Great solution! The web.config wasn't working for me either using asp.net mvc 2 – 321X
1 upvote
  flag
Wow, seems like an oversight on Microsoft's part to not make the Json() method respect the web.config settings for serialization length. Thanks for the answer this worked like a charm! – Chris Lees
3 upvote
  flag
If you're using MVC4 please see @fanisch answer as well. – Beyers
upvote
  flag
this answer is really helpful, it works. The one marked as answer, just setting the config maxJson size doesnt work for me. – Taha Rehman Siddiqui
upvote
  flag
What is weird is that it seems as though Request.CreateResponse (which returns an HttpResponseMessage) of the ApiController, has a higher limit. Does anyone know what it is or why? – SideFX
1 upvote
  flag
How about Deserialization? I met this error at action's model binding. – guogangj
upvote
  flag
Spot on. Saving us plenty of trouble shooting! – Brett Jones

I fixed it.

//your Json data here
string json_object="........";
JavaScriptSerializer jsJson = new JavaScriptSerializer();
jsJson.MaxJsonLength = 2147483644;
MyClass obj = jsJson.Deserialize<MyClass>(json_object);

It works very well.

upvote
  flag
Awesome! This is the only solution that worked for me and its better anyways since its not a global change. Thanks! – Sealer_05

In MVC 4 you can do:

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
    return new JsonResult()
    {
        Data = data,
        ContentType = contentType,
        ContentEncoding = contentEncoding,
        JsonRequestBehavior = behavior,
        MaxJsonLength = Int32.MaxValue
    };
}

in your controller.

4 upvote
  flag
I can confirm that the above works like a charm in MVC 4, thank you fanisch. – Beyers
9 upvote
  flag
I can confirm as well. Putting this code inside a base controller is definitely the cleanest approach proposed. – parliament
12 upvote
  flag
This also works by just adding "MaxJsonLength = Int32.MaxValue" to the individual action result. In case the change is not desired controller or project wide. – Hypnovirus
upvote
  flag
Worked perfectly for me! I have a base class that all of my controllers derive from and I just added this to the base class. – Scottie
upvote
  flag
I had this issue with the EasyQuery for ASP.net component from korzh.com when executing a query that returned a large dataset. Adding this method straight into the EasyQuery controller fixed the issue. – Terry Kernan
3 upvote
  flag
This is the best answer. The MaxJsonLength can be configured per controller. – liang
1 upvote
  flag
@Fanisch: Have you note it is decreasing page performance? – Amit
1 upvote
  flag
@Amit: I haven't notice a page performance penalty and I don't think that the property has anything to do with that. IMHO performance is proportional to the JSON string you are returning. The larger the string the slower the response. – fanisch
1 upvote
  flag
I confirm that it works in MVC 5 as well. I also wonder why all the other solutions have such high vote rates when this one is the most logical one. It solves the problem completely especially when you have a custom base controller class. – Santhos
3 upvote
  flag
WARNING: this solution disables the compression (if requested) of the response. Add this filter on your action: //allinonescript.com/questions/3802107/… – Gorgi Rankovski
upvote
  flag
@fanisch: Can we assign MaxJsonLength = Int64.MaxValue instead of MaxJsonLength = Int32.MaxValue? – Musakkhir Sayyed
upvote
  flag
@MusakkhirSayyed: MaxJsonLength is Int32 so no we can't assign Int64.MaxValue – fanisch
upvote
  flag
@fanisch I have a problem: My web application sends an AJAX request from the Javascript to the Server. The object being sent is too big for the default value of the serializer and therefore System.Web.Script.Serialization.JavaScriptSerializer.Deseria‌​lize throws an exception before my Controller's method can even try to do what it's supposed to do. Furthermore, the method I'm trying to call simply returns void. Where would I put your snippet? The snippet I added from the Accepted Solution isn't working for me. Thanks. – sab669
upvote
  flag
@sab669 This snippet is for returning a large JSON string. In your case you need to send a large string, so this is not going to help you. See this SO question //allinonescript.com/questions/18622106/… . I think it might help you. – fanisch
upvote
  flag
@fanisch Thanks for the response to a multi-year-old answer :) Unfortunately I've tried that, and all manner of other solutions in this page relating to the web.config file to no luck. Oh well. – sab669
upvote
  flag
Please note that this answer from user @ fanisch worked for my MVC4 app, Thank you ! You can also add this code in your base controller :) – Gurpreet Singh
upvote
  flag
I am using mvc 5 and my problem was "The length of the string exceeds the value set on the maxJsonLength property." it was 20.000 rows. I set MaxJsonLength to 2147483644 it was still not working but above code fixed it i dont know how but thanks:) – Nakres

You can set it in the config as others have said, or you can set in on an individual instance of the serializer like:

var js = new JavaScriptSerializer() { MaxJsonLength = int.MaxValue };

For those who are having issues with in MVC3 with JSON that's automatically being deserialized for a model binder and is too large, here is a solution.

  1. Copy the code for the JsonValueProviderFactory class from the MVC3 source code into a new class.
  2. Add a line to change the maximum JSON length before the object is deserialized.
  3. Replace the JsonValueProviderFactory class with your new, modified class.

Thanks to http://blog.naver.com/techshare/100145191355 and https://gist.github.com/DalSoft/1588818 for pointing me in the right direction for how to do this. The last link on the first site contains full source code for the solution.

Just ran into this. I'm getting over 6,000 records. Just decided I'd just do some paging. As in, I accept a page number in my MVC JsonResult endpoint, which is defaulted to 0 so it's not necessary, like so:

public JsonResult MyObjects(int pageNumber = 0)

Then instead of saying:

return Json(_repository.MyObjects.ToList(), JsonRequestBehavior.AllowGet);

I say:

return Json(_repository.MyObjects.OrderBy(obj => obj.ID).Skip(1000 * pageNumber).Take(1000).ToList(), JsonRequestBehavior.AllowGet);

It's very simple. Then, in JavaScript, instead of this:

function myAJAXCallback(items) {
    // Do stuff here
}

I instead say:

var pageNumber = 0;
function myAJAXCallback(items) {
    if(items.length == 1000)
        // Call same endpoint but add this to the end: '?pageNumber=' + ++pageNumber
    }
    // Do stuff here
}

And append your records to whatever you were doing with them in the first place. Or just wait until all the calls finish and cobble the results together.

If you are getting this error from the MiniProfiler in MVC then you can increase the value by setting the property MiniProfiler.Settings.MaxJsonResponseSize to the desired value. By default, this tool seems to ignore the value set in config.

MiniProfiler.Settings.MaxJsonResponseSize = 104857600;

Courtesy mvc-mini-profiler.

I was having this problem in ASP.NET Web Forms. It was completely ignoring the web.config file settings so I did this:

        JavaScriptSerializer serializer = new JavaScriptSerializer();

        serializer.MaxJsonLength = Int32.MaxValue; 

        return serializer.Serialize(response);

Of course overall this is terrible practice. If you are sending this much data in a web service call you should look at a different approach.

1 upvote
  flag
did this work for you? where did you place this code? – user1012598
upvote
  flag
Our problem was because we had a textarea that allowed for HTML and people were embedding images as HTML which caused the entry to become very large and JSON serializer to fail. I guess if it can be done users will do it... – Marko
upvote
  flag
Please describe where we should put this code... @Flea – Koray Durudogan
upvote
  flag
@KorayDurudogan - I put this in the Ajax method that was returning the response, so in my controller. Hope that helps! – Flea
upvote
  flag
I am not challenging your response, but trying to get a better idea of what better approaches there are. I have a query that depending on what the user's criteria is will determine the result size. I return a JsonResult, Would it matter if I returned an excel file? – eaglei22
upvote
  flag
@eaglei22 - Depending on what you are trying to send back, would it be possible to send your data in smaller chunks and then assemble it all together once its finished? For example, let's say you are sending back 10,000 records. Could you send chunks of say 2,000 records until all 10,000 were sent. Perhaps think of things like that. – Flea
upvote
  flag
Thanks @Flea for the response! Actually that's a good example, because a new requirement came in for a max of 10k records :) I will look into sending data back in sections. – eaglei22
upvote
  flag
@eaglei22 - That's awesome! :) If you don't end up sending it back in chunks, please do share how you ultimately do it! I'd like to know myself if you find a better way! – Flea
upvote
  flag
@Flea I would like to send it back in chunks, but I have to figure out how to do that first! Lol. Here is a link to the question if you would like to contribute: //allinonescript.com/questions/42935876/… – eaglei22

I solved the problem adding this code:

String confString = HttpContext.Current.Request.ApplicationPath.ToString();
Configuration conf = WebConfigurationManager.OpenWebConfiguration(confString);
ScriptingJsonSerializationSection section = (ScriptingJsonSerializationSection)conf.GetSection("system.web.extensions/scripting/webServices/jsonSerialization");
section.MaxJsonLength = 6553600;
conf.Save();
upvote
  flag
This seems like a hackish solution but interesting approach regardless. I found it useful thanks! For me in apsnet mvc 5 controller I had to remove 'Current' from the namespace. I made a couple adjustments: string confString = HttpContext.Request.ApplicationPath.ToString(); var conf = System.Web.Configuration.WebConfigurationManager.OpenWebConf‌​iguration(confString‌​); var section = (System.Web.Configuration.ScriptingJsonSerializationSection)‌​conf.GetSection("sys‌​tem.web.extensions/s‌​cripting/webServices‌​/jsonSerialization")‌​; section.MaxJsonLength = int.MaxValue; conf.Save(); – ooXei1sh

you can write this line into Controller

json.MaxJsonLength = 2147483644;

you can also write this line into web.config

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

`

To be on the safe side, use both.

use lib\Newtonsoft.Json.dll

public string serializeObj(dynamic json) {        
    return JsonConvert.SerializeObject(json);
}

Solution for WebForms UpdatePanel:

Add a setting to Web.config:

<configuration>
  <appSettings>
    <add key="aspnet:UpdatePanelMaxScriptLength" value="2147483647" />
  </appSettings>
</configuration>

https://support.microsoft.com/en-us/kb/981884

ScriptRegistrationManager class contains following code:

// Serialize the attributes to JSON and write them out
JavaScriptSerializer serializer = new JavaScriptSerializer();

// Dev10# 877767 - Allow configurable UpdatePanel script block length
// The default is JavaScriptSerializer.DefaultMaxJsonLength
if (AppSettings.UpdatePanelMaxScriptLength > 0) {
    serializer.MaxJsonLength = AppSettings.UpdatePanelMaxScriptLength;
}  

string attrText = serializer.Serialize(attrs);

if you are still getting error after web.config setting like following:

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

I solved it using following:

   public ActionResult/JsonResult getData()
   {
      var jsonResult = Json(superlargedata, JsonRequestBehavior.AllowGet);
      jsonResult.MaxJsonLength = int.MaxValue;
      return jsonResult;
    }

I hope this should help.

I suggest setting it to Int32.MaxValue.

JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;

if this maxJsonLength value is a int then how big is its int 32bit/64bit/16bit.... i just want to be sure whats the maximum value i can set as my maxJsonLength

<scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2147483647">
            </jsonSerialization>
        </webServices>
    </scripting>

I followed vestigal's answer and got to this solution:

When I needed to post a large json to an action in a controller, I would get the famous "Error during deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.\r\nParameter name: input value provider".

What I did is create a new ValueProviderFactory, LargeJsonValueProviderFactory, and set the MaxJsonLength = Int32.MaxValue in the GetDeserializedObject method

public sealed class LargeJsonValueProviderFactory : ValueProviderFactory
{
private static void AddToBackingStore(LargeJsonValueProviderFactory.EntryLimitedDictionary backingStore, string prefix, object value)
{
    IDictionary<string, object> dictionary = value as IDictionary<string, object>;
    if (dictionary != null)
    {
        foreach (KeyValuePair<string, object> keyValuePair in (IEnumerable<KeyValuePair<string, object>>) dictionary)
            LargeJsonValueProviderFactory.AddToBackingStore(backingStore, LargeJsonValueProviderFactory.MakePropertyKey(prefix, keyValuePair.Key), keyValuePair.Value);
    }
    else
    {
        IList list = value as IList;
        if (list != null)
        {
            for (int index = 0; index < list.Count; ++index)
                LargeJsonValueProviderFactory.AddToBackingStore(backingStore, LargeJsonValueProviderFactory.MakeArrayKey(prefix, index), list[index]);
        }
        else
            backingStore.Add(prefix, value);
    }
}

private static object GetDeserializedObject(ControllerContext controllerContext)
{
    if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
        return (object) null;
    string end = new StreamReader(controllerContext.HttpContext.Request.InputStream).ReadToEnd();
    if (string.IsNullOrEmpty(end))
        return (object) null;

    var serializer = new JavaScriptSerializer {MaxJsonLength = Int32.MaxValue};

    return serializer.DeserializeObject(end);
}

/// <summary>Returns a JSON value-provider object for the specified controller context.</summary>
/// <returns>A JSON value-provider object for the specified controller context.</returns>
/// <param name="controllerContext">The controller context.</param>
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
    if (controllerContext == null)
        throw new ArgumentNullException("controllerContext");
    object deserializedObject = LargeJsonValueProviderFactory.GetDeserializedObject(controllerContext);
    if (deserializedObject == null)
        return (IValueProvider) null;
    Dictionary<string, object> dictionary = new Dictionary<string, object>((IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase);
    LargeJsonValueProviderFactory.AddToBackingStore(new LargeJsonValueProviderFactory.EntryLimitedDictionary((IDictionary<string, object>) dictionary), string.Empty, deserializedObject);
    return (IValueProvider) new DictionaryValueProvider<object>((IDictionary<string, object>) dictionary, CultureInfo.CurrentCulture);
}

private static string MakeArrayKey(string prefix, int index)
{
    return prefix + "[" + index.ToString((IFormatProvider) CultureInfo.InvariantCulture) + "]";
}

private static string MakePropertyKey(string prefix, string propertyName)
{
    if (!string.IsNullOrEmpty(prefix))
        return prefix + "." + propertyName;
    return propertyName;
}

private class EntryLimitedDictionary
{
    private static int _maximumDepth = LargeJsonValueProviderFactory.EntryLimitedDictionary.GetMaximumDepth();
    private readonly IDictionary<string, object> _innerDictionary;
    private int _itemCount;

    public EntryLimitedDictionary(IDictionary<string, object> innerDictionary)
    {
        this._innerDictionary = innerDictionary;
    }

    public void Add(string key, object value)
    {
        if (++this._itemCount > LargeJsonValueProviderFactory.EntryLimitedDictionary._maximumDepth)
            throw new InvalidOperationException("JsonValueProviderFactory_RequestTooLarge");
        this._innerDictionary.Add(key, value);
    }

    private static int GetMaximumDepth()
    {
        NameValueCollection appSettings = ConfigurationManager.AppSettings;
        if (appSettings != null)
        {
            string[] values = appSettings.GetValues("aspnet:MaxJsonDeserializerMembers");
            int result;
            if (values != null && values.Length > 0 && int.TryParse(values[0], out result))
                return result;
        }
        return 1000;
    }
}

}

Then, in the Application_Start method from Global.asax.cs, replace the ValueProviderFactory with the new one:

protected void Application_Start()
{
    ...

    //Add LargeJsonValueProviderFactory
    ValueProviderFactory jsonFactory = null;
    foreach (var factory in ValueProviderFactories.Factories)
    {
        if (factory.GetType().FullName == "System.Web.Mvc.JsonValueProviderFactory")
        {
            jsonFactory = factory;
            break;
        }
    }

    if (jsonFactory != null)
    {
        ValueProviderFactories.Factories.Remove(jsonFactory);
    }

    var largeJsonValueProviderFactory = new LargeJsonValueProviderFactory();
    ValueProviderFactories.Factories.Add(largeJsonValueProviderFactory);
}

How about some attribute magic?

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class MaxJsonSizeAttribute : ActionFilterAttribute
{
    // Default: 10 MB worth of one byte chars
    private int maxLength = 10 * 1024 * 1024;

    public int MaxLength
    {
        set
        {
            if (value < 0) throw new ArgumentOutOfRangeException("value", "Value must be at least 0.");

            maxLength = value;
        }
        get { return maxLength; }
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        JsonResult json = filterContext.Result as JsonResult;
        if (json != null)
        {
            if (maxLength == 0)
            {
                json.MaxJsonLength = int.MaxValue;
            }
            else
            {
                json.MaxJsonLength = maxLength;
            }
        }
    }
}

Then you could either apply it globally using the global filter configuration or controller/action-wise.

upvote
  flag
Very good, this work for me. – rosta

If you are encountering this sort of issue in View, you can use below method to resolve that. Here Iused Newtonsoft package .

@using Newtonsoft.Json
<script type="text/javascript">
    var partData = @Html.Raw(JsonConvert.SerializeObject(ViewBag.Part));
</script>
upvote
  flag
Does this mean I don't have to worry about max length if I use Json.NET? I don't think there is a way to set max length in Json.NET so I'm hoping it just works out of the box. – kimbaudi

Simply set MaxJsonLength proprty in MVC's Action method

JsonResult json= Json(classObject, JsonRequestBehavior.AllowGet);
json.MaxJsonLength = int.MaxValue;
return json;

We don't need any server side changes. you can fix this only modify by web.config file This helped for me. try this out

<appSettings>
 <add key="aspnet:MaxJsonDeserializerMembers" value="2147483647" />
<add key="aspnet:UpdatePanelMaxScriptLength" value="2147483647" />
</appSettings>  

and   

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.