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

je charge des données de contenu d'onglet par jQuery ajax méthode post via la méthode web avec environ 200-300 enregistrements. Et l'obtention d'erreur suivant dans la console:

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

changer la longueur du maxJsonLength attribut dans Web.config comme cela 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
demandé sur Hakam Fostok 2012-08-09 14:17:32

3 réponses

JavaScriptSerialzer a un bien public nommé MaxJsonLength selon

http://msdn.microsoft.com/en-us/library/system.web.configuration.scriptingjsonserializationsection.maxjsonlength.aspx

maintenant, là où vous désérialisez votre json, utilisez ceci

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 ceci par msdn et résolu un problème qui m'ennuyait depuis longtemps.

31
répondu Taha Rehman Siddiqui 2017-02-01 16:02:33

je sais que c'est un très vieux fil au moment de ma lecture, et que WebMethod n'est pas vraiment une chose dans ASP.NET MVC donc c'est un peu tangentiel. Mais, si quelqu'un traverse -

si vous utilisez ASP.NET MVC il existe une alternative à l'invocation JavaScriptSerializer directement, ce qui est d'initialiser l' JsonResult et définissez MaxJsonLength propriété 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
répondu lewiSnort 2016-06-23 20:01:47

ne connaissant pas la taille de votre corde mais peut-être qu'elle dépasse encore la limite max que vous avez fixée?

idéalement, les scénarios ajax ne sont conçus que pour les appels côté serveur de petite à moyenne taille, non pour recevoir des tonnes de données, et si vous recevez beaucoup de données en utilisant la requête asynchrone, alors vous demandez des problèmes.

Voir ici pour une alternative

0
répondu Riain McAtamney 2012-08-09 10:37:35