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?
3 réponses
JavaScriptSerialzer a un bien public nommé MaxJsonLength selon
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.
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
};
}
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