web-dev-qa-db-fra.com

La longueur de la chaîne dépasse la valeur définie dans la propriété maxJsonLength

Je charge les données de contenu des onglets via la méthode ajax de post de jQuery via la méthode Web avec environ 200 à 300 enregistrements. Et obtenir l'erreur suivante dans la console:

Erreur: Sys.Net.WebServiceFailedException: Sys.Net.WebServiceFailedException: System.InvalidOperationException -- Erreur lors de la sérialisation ou de la désérialisation à l'aide de JSON JavaScriptSerializer. La longueur de la chaîne dépasse la valeur définie sur la propriété maxJsonLength.

Changer la longueur de l'attribut maxJsonLength dans Web.config comme ceci n'aide pas. 

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

Quelqu'un peut-il m'aider à résoudre ce problème?

23
swpnilprakashpatil

JavaScriptSerialzer a une propriété publique nommée MaxJsonLength selon

http://msdn.Microsoft.com/en-us/library/system.web.configuration.scriptingjsonserializations.maxjsonlength.aspx

Maintenant, où vous désérialisez votre JSON, utilisez cette

JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue; //Or any size you want to use, basically int maxValue is 2GB, you shouldn't need this big json string to deserialize, else you are doing it wrong.
myObject obj = serializer.Deserialize<myObject>(yourJsonString);

Et cela devrait fonctionner parfaitement, j’ai récemment compris cela grâce à msdn et résolu un problème qui me dérangeait depuis longtemps.

31

Je sais que c’est un sujet très ancien au moment de ma lecture et que WebMethod n’est pas vraiment une chose dans ASP.NET MVC, c’est donc quelque peu tangentiel. Mais si quelqu'un le traverse - 

Si vous utilisez ASP.NET MVC Il existe une alternative à l'appel direct de JavaScriptSerializer: initialiser JsonResult et définir la propriété MaxJsonLength sur le résultat lui-même:

    private JsonResult GetReallyBigJsonResult(object data, JsonRequestBehavior requestBehavior)
    {
            return new JsonResult()
            {
                ContentEncoding = Encoding.Default,
                ContentType = "application/json",
                Data = data,
                JsonRequestBehavior = requestBehavior,
                MaxJsonLength = int.MaxValue
            };

    }
5
lewiSnort

Ne connaissant pas la taille de votre chaîne, mais peut-être dépasse-t-il toujours la limite maximale que vous avez définie?

Idéalement, les scénarios ajax ne concernent que les appels côté serveur de petite à moyenne taille, pas pour obtenir des tonnes de données. Si vous obtenez beaucoup de données à l'aide de la demande asynchrone, vous vous posez des problèmes.

Voir ici pour une alternative

0
Riain McAtamney