In certe situazione potrebbe capitare di ricevere questo errore:
Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
Come è facile intuire dal messaggio, l’errore si ha quando si tenta di serializzare o deserializzare un JSON la cui dimensione sia maggiore rispetto a quella di default. Nel mio caso l’errore si aveva durante la chiamata ad un PageMethods fatta tramite jQuery. I dati passati infatti risultavano essere troppo grandi.
La proprietà maxJsonLength è quella che controlla la dimensione massima dei dati JSON e può essere modificata da web.config:
1: <System.Web.Extensions>
2: <Scripting>
3: <WebServices>
4: <JsonSerialization MaxJsonLength="500000">
5: </JsonSerialization>
6: </WebServices>
7: </Scripting>
8: </System.Web.Extensions>
Leggendo la documentazione ufficiale viene indicato che la dimensione di default è di 2097152 caratteri pari a 4 Mb di dati Unicode. Questo però nel mio caso non è vero, dato che, pur passando meno dati di questo limite, ricevo l’errore sopra indicato.
Utilizzando le due righe di codice seguenti, ho verificato che il limite nel mio caso (Framework .NET 3.5 SP1) è di 102400 caratteri, quindi ben inferiore al limite indicato nella documentazione.
1: String sectionName = "system.web.extensions/scripting/webServices/jsonSerialization";
2: ScriptingJsonSerializationSection jsonSection =
3: (ScriptingJsonSerializationSection)WebConfigurationManager.GetSection(sectionName);
4: Response.Write(jsonSection.MaxJsonLength);