J'utilise la fonction de saisie semi-automatique de jQuery. Lorsque j'essaie de récupérer la liste de plus de 17000 enregistrements (chacun n'aura pas plus de 10 caractères), cela dépasse la longueur et génère l'erreur:
Informations sur l'exception:
Type d'exception: InvalidOperationException
Message d'exception: 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.
Puis-je définir une longueur illimitée pour maxJsonLength
in web.config
? Sinon, quelle est la longueur maximale que je peux définir?
asp.net
asp.net-mvc
json
Prasad
la source
la source
Réponses:
REMARQUE: cette réponse ne s'applique qu'aux services Web.Si vous renvoyez JSON à partir d'une méthode Controller, assurez-vous de lire également cette réponse SO ci-dessous: https://stackoverflow.com/a/7207539/1246870
La propriété MaxJsonLength ne peut pas être illimitée, est une propriété entière dont la valeur par défaut est 102400 (100k).
Vous pouvez définir la
MaxJsonLength
propriété sur votre web.config:la source
2147483647
comme le soulignent @depsart et @ Descár.return Json()
ou de quelque choseSi vous utilisez MVC 4 , assurez-vous de vérifier également cette réponse .
Si vous recevez toujours l'erreur:
maxJsonLength
propriété à sa valeur maximale dans web.configvotre problème est probable que:
Fondamentalement, le "interne"
JavaScriptSerializer
respecte la valeur demaxJsonLength
lorsqu'il est appelé à partir d'une méthode Web; l'utilisation directe d'unJavaScriptSerializer
(ou l'utilisation via une méthode d'action / contrôleur MVC) ne respecte pas lamaxJsonLength
propriété, du moins pas dans lasystemWebExtensions.scripting.webServices.jsonSerialization
section de web.config.Comme solution de contournement, vous pouvez effectuer les opérations suivantes dans votre contrôleur (ou n'importe où vraiment):
Cette réponse est mon interprétation de cette réponse au forum asp.net .
la source
Json()
méthode du résultat d'action dans asp.net mvc.Dans MVC 4, vous pouvez faire:
dans votre contrôleur.
Une addition:
Pour toute personne perplexe par les paramètres que vous devez spécifier, un appel pourrait ressembler à ceci:
la source
Vous pouvez configurer la longueur maximale des requêtes json dans votre fichier web.config:
La valeur par défaut de maxJsonLength est 102400 . Pour plus de détails, consultez cette page MSDN: http://msdn.microsoft.com/en-us/library/bb763183.aspx
la source
si vous obtenez toujours une erreur après le paramètre web.config comme suit:
Je l'ai résolu en suivant:
J'espère que cela devrait aider.
la source
J'avais ce problème dans les formulaires Web ASP.NET. Il ignorait complètement les paramètres du fichier web.config, j'ai donc fait ceci:
Bien sûr, dans l'ensemble, c'est une pratique terrible. Si vous envoyez autant de données dans un appel de service Web, vous devriez envisager une approche différente.
la source
Je l'ai corrigé.
Il fonctionne très bien.
la source
J'ai suivi la réponse de vestigal et suis arrivé à cette solution:
Lorsque j'avais besoin de publier un grand json dans une action dans un contrôleur, j'obtenais la fameuse "Erreur lors 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. \ R \ nNom du paramètre: entrée fournisseur de valeur ".
Ce que j'ai fait, c'est créer un nouveau ValueProviderFactory, LargeJsonValueProviderFactory et définir la MaxJsonLength = Int32.MaxValue dans la méthode GetDeserializedObject
Ensuite, dans la méthode Application_Start de Global.asax.cs, remplacez ValueProviderFactory par le nouveau:
la source
si, après avoir implémenté l'ajout ci-dessus dans votre web.config, vous obtenez une «section de configuration non reconnue system.web.extensions». erreur, essayez d'ajouter ceci à votre web.config dans la
<ConfigSections>
section:la source
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
, comme on le voit sur cette page: forums.asp.net/t/1446510.aspx/1vous pouvez écrire cette ligne dans Controller
vous pouvez également écrire cette ligne dans
web.config
"
Pour être prudent, utilisez les deux.
la source
Si vous obtenez cette erreur du MiniProfiler dans MVC, vous pouvez augmenter la valeur en définissant la propriété
MiniProfiler.Settings.MaxJsonResponseSize
sur la valeur souhaitée. Par défaut, cet outil semble ignorer la valeur définie dans config.Courtoisie mvc-mini-profiler .
la source
Définissez simplement la propriété MaxJsonLength dans la méthode d'action de MVC
la source
Je suggère de le définir sur Int32.MaxValue.
la source
Que diriez-vous d'une magie d'attribut?
Ensuite, vous pouvez soit l'appliquer globalement en utilisant la configuration du filtre global ou le contrôleur / l'action.
la source
La question est vraiment de savoir si vous devez vraiment renvoyer 17k enregistrements? Comment prévoyez-vous de gérer toutes les données dans le navigateur? De toute façon, les utilisateurs ne feront pas défiler 17 000 lignes.
Une meilleure approche consiste à ne récupérer que les «premiers enregistrements» et à en charger plus au besoin.
la source
Vous pouvez le définir dans la configuration comme d'autres l'ont dit, ou vous pouvez le configurer sur une instance individuelle du sérialiseur comme:
la source
Pour ceux qui ont des problèmes avec MVC3 avec JSON qui est automatiquement désérialisé pour un classeur de modèle et qui est trop volumineux, voici une solution.
Grâce à http://blog.naver.com/techshare/100145191355 et https://gist.github.com/DalSoft/1588818 de m'avoir indiqué dans la bonne direction comment procéder. Le dernier lien sur le premier site contient le code source complet de la solution.
la source
Si vous rencontrez ce type de problème dans View, vous pouvez utiliser la méthode ci-dessous pour résoudre ce problème. Ici, j'ai utilisé le package Newtonsoft .
la source
la source
Il semble qu'il n'y ait pas de valeur "illimitée". La valeur par défaut est 2097152 caractères, ce qui équivaut à 4 Mo de données de chaîne Unicode.
Comme cela a déjà été observé, 17 000 enregistrements sont difficiles à bien utiliser dans le navigateur. Si vous présentez une vue agrégée, il peut être beaucoup plus efficace de faire l'agrégation sur le serveur et de ne transférer qu'un résumé dans le navigateur. Par exemple, considérons un navigateur de système de fichiers, nous ne voyons que le haut de l'arborescence, puis émettons d'autres demandes au fur et à mesure que nous explorons. Le nombre d'enregistrements renvoyés dans chaque demande est relativement faible. Une présentation arborescente peut bien fonctionner pour les grands ensembles de résultats.
la source
Je suis juste tombé sur ça. Je reçois plus de 6 000 enregistrements. Je viens de décider que je ferais juste quelques recherches. Comme dans, j'accepte un numéro de page dans mon point de terminaison MVC JsonResult, qui est défini par défaut sur 0, ce n'est donc pas nécessaire, comme ceci:
Alors au lieu de dire:
Je dis:
C'est très simple. Ensuite, en JavaScript, au lieu de cela:
Je dis plutôt:
Et ajoutez vos enregistrements à tout ce que vous faisiez avec eux en premier lieu. Ou attendez simplement que tous les appels se terminent et concoctez les résultats ensemble.
la source
J'ai résolu le problème en ajoutant ce code:
la source
string confString = HttpContext.Request.ApplicationPath.ToString(); var conf = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(confString); var section = (System.Web.Configuration.ScriptingJsonSerializationSection)conf.GetSection("system.web.extensions/scripting/webServices/jsonSerialization"); section.MaxJsonLength = int.MaxValue; conf.Save();
Correction ASP.NET MVC 5 alternative:
(Le mien est similaire à la réponse des MFC ci-dessus avec quelques petits changements)
Je n'étais pas encore prêt à passer à Json.NET et dans mon cas, l'erreur se produisait lors de la demande. La meilleure approche dans mon scénario consistait à modifier le réel
JsonValueProviderFactory
qui applique le correctif au projet global et peut être effectué en modifiant leglobal.cs
fichier en tant que tel.ajoutez une entrée web.config:
puis créez les deux classes suivantes
Il s'agit essentiellement d'une copie exacte de l'implémentation par défaut trouvée dans,
System.Web.Mvc
mais avec l'ajout d'une valeur de paramétrage d'application web.config configurableaspnet:MaxJsonLength
.la source
Solution pour WebForms UpdatePanel:
Ajoutez un paramètre à Web.config:
https://support.microsoft.com/en-us/kb/981884
ScriptRegistrationManager
La classe contient le code suivant:la source
Nous n'avons besoin d'aucune modification côté serveur. vous pouvez corriger cela uniquement modifier par le fichier web.config Cela m'a aidé. essayez ceci
la source
utilisation
lib\Newtonsoft.Json.dll
la source
Correctif pour ASP.NET MVC: si vous souhaitez le corriger uniquement pour une action particulière à l'origine du problème, codez comme ceci:
vous pouvez changer ceci:
Et la fonctionnalité devrait être la même, vous pouvez simplement renvoyer un JSON plus grand en réponse.
Explication basée sur le code source ASP.NET MVC: vous pouvez vérifier la
Controller.Json
méthode utilisée dans le code source ASP.NET MVCIl appelle une autre
Controller.Json
méthode:où passé
contentType
etcontentEncoding
objet sontnull
. Donc, fondamentalement, appeler lereturn Json(object)
contrôleur équivaut à appelerreturn new JsonResult { Data = object, JsonRequestBehavior = sonRequestBehavior.DenyGet }
. Vous pouvez utiliser le deuxième formulaire et le paramétrerJsonResult
.Alors, que se passe-t-il lorsque vous définissez une
MaxJsonLength
propriété (par défaut, elle est nulle)? Il est transmis à laJavaScriptSerializer.MaxJsonLength
propriété, puis laJavaScriptSerializer.Serialize
méthode est appelée :Et lorsque vous ne définissez pas la
MaxJsonLenght
propriété du sérialiseur, il prend la valeur par défaut qui n'est que de 2 Mo.la source
si cette valeur maxJsonLength est un int alors quelle est la taille de son int 32bit / 64bit / 16bit .... je veux juste être sûr quelle est la valeur maximale que je peux définir comme mon maxJsonLength
la source
Vous n'avez pas besoin de faire avec web.config Vous pouvez utiliser une propriété courte pendant la valeur catch de la liste de passage Par exemple, déclarez un modèle comme
ici j'utilise de courtes proportions comme BC = code à barres BE = édition de livre et ainsi de suite
la source