Ich verwende die Autocomplete-Funktion von jQuery. Wenn ich versuche, die Liste mit mehr als 17000 Datensätzen abzurufen (jeder hat nicht mehr als 10 Zeichen), überschreitet dies die Länge und löst den Fehler aus:
Ausnahmeinformationen:
Ausnahmetyp: InvalidOperationException
Ausnahmemeldung: Fehler während der Serialisierung oder Deserialisierung mit dem JSON JavaScriptSerializer. Die Länge der Zeichenfolge überschreitet den in der Eigenschaft maxJsonLength festgelegten Wert.
Kann ich eine unbegrenzte Länge für maxJsonLength
in einstellen web.config
? Wenn nicht, welche maximale Länge kann ich einstellen?
asp.net
asp.net-mvc
json
Prasad
quelle
quelle
Antworten:
HINWEIS: Diese Antwort gilt nur für Webdienste. Wenn Sie JSON von einer Controller-Methode zurückgeben, lesen Sie auch diese SO-Antwort unten: https://stackoverflow.com/a/7207539/1246870
Die MaxJsonLength- Eigenschaft kann nicht unbegrenzt sein. Sie ist eine Ganzzahl-Eigenschaft, die standardmäßig 102400 (100 KB) lautet.
Sie können die
MaxJsonLength
Eigenschaft in Ihrer web.config festlegen:quelle
2147483647
wie bei @depsart und @ Descár angegeben.return Json()
Wenn Sie MVC 4 verwenden , lesen Sie auch diese Antwort .
Wenn Sie immer noch den Fehler erhalten:
maxJsonLength
Eigenschaft in web.config auf ihren Maximalwert gesetzt habenIhr Problem ist wahrscheinlich, dass:
Grundsätzlich
JavaScriptSerializer
respektiert das "interne" den Wert,maxJsonLength
wenn es von einer Webmethode aufgerufen wird; direkte Verwendung von aJavaScriptSerializer
(oder der Verwendung über eine MVC action-Methode / Controller) wird nicht respektiert diemaxJsonLength
Eigenschaft, zumindest nicht aus demsystemWebExtensions.scripting.webServices.jsonSerialization
Abschnitt web.config.Um dieses Problem zu umgehen, können Sie in Ihrem Controller (oder wirklich überall) Folgendes tun:
Diese Antwort ist meine Interpretation dieser Antwort im asp.net-Forum .
quelle
Json()
Aktionsergebnismethode in asp.net mvc verwende.In MVC 4 können Sie Folgendes tun:
in Ihrem Controller.
Zusatz:
Für alle, die sich nicht sicher sind, welche Parameter Sie angeben müssen, könnte ein Aufruf folgendermaßen aussehen:
quelle
Sie können die maximale Länge für JSON-Anforderungen in Ihrer Datei web.config konfigurieren:
Der Standardwert für maxJsonLength ist 102400 . Weitere Informationen finden Sie auf dieser MSDN-Seite: http://msdn.microsoft.com/en-us/library/bb763183.aspx
quelle
Wenn nach der Einstellung von web.config immer noch eine Fehlermeldung angezeigt wird:
Ich habe es folgendermaßen gelöst:
Ich hoffe das sollte helfen.
quelle
Ich hatte dieses Problem in ASP.NET Web Forms. Die Einstellungen der Datei web.config wurden vollständig ignoriert, also habe ich Folgendes getan:
Insgesamt ist dies natürlich eine schreckliche Praxis. Wenn Sie so viele Daten in einem Webdienstaufruf senden, sollten Sie einen anderen Ansatz wählen.
quelle
Ich habe es repariert.
Es funktioniert sehr gut.
quelle
Ich folgte der Antwort von Vestigal und kam zu dieser Lösung:
Wenn ich einen großen JSON an eine Aktion in einem Controller senden musste, wurde der berühmte Fehler "Fehler beim Deserialisieren mit dem JSON JavaScriptSerializer" angezeigt. Die Länge der Zeichenfolge überschreitet den in der Eigenschaft maxJsonLength festgelegten Wert. \ R \ nParametername: Eingabe Wertanbieter ".
Ich habe eine neue ValueProviderFactory, LargeJsonValueProviderFactory, erstellt und MaxJsonLength = Int32.MaxValue in der GetDeserializedObject-Methode festgelegt
Ersetzen Sie dann in der Application_Start-Methode von Global.asax.cs die ValueProviderFactory durch die neue:
quelle
Wenn Sie nach der Implementierung des obigen Zusatzes in Ihre web.config einen "Nicht erkannten Konfigurationsabschnitt system.web.extensions" erhalten. Fehler, dann versuchen Sie, dies zu Ihrer web.config im
<ConfigSections>
Abschnitt hinzuzufügen :quelle
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
, wie auf dieser Seite zu sehen: forums.asp.net/t/1446510.aspx/1Sie können diese Zeile in Controller schreiben
Sie können diese Zeile auch in schreiben
web.config
`
Verwenden Sie zur Sicherheit beide.
quelle
Wenn Sie diesen Fehler vom MiniProfiler in MVC erhalten, können Sie den Wert erhöhen, indem Sie die Eigenschaft
MiniProfiler.Settings.MaxJsonResponseSize
auf den gewünschten Wert setzen. Standardmäßig scheint dieses Tool den in config festgelegten Wert zu ignorieren.Mit freundlicher Genehmigung von mvc-mini-profiler .
quelle
Legen Sie einfach die Eigenschaft MaxJsonLength in der Action-Methode von MVC fest
quelle
Ich schlage vor, es auf Int32.MaxValue zu setzen.
quelle
Wie wäre es mit einer Attributmagie?
Dann können Sie es entweder global mithilfe der globalen Filterkonfiguration oder in Bezug auf Controller / Aktion anwenden.
quelle
Die Frage ist wirklich, ob Sie wirklich 17.000 Datensätze zurückgeben müssen. Wie wollen Sie mit allen Daten im Browser umgehen? Die Benutzer werden sowieso nicht durch 17000 Zeilen scrollen.
Ein besserer Ansatz besteht darin, nur die "wenigen" Datensätze abzurufen und bei Bedarf mehr zu laden.
quelle
Sie können es in der Konfiguration festlegen, wie andere gesagt haben, oder Sie können eine einzelne Instanz des Serializers wie folgt einrichten:
quelle
Für diejenigen, die Probleme mit MVON in MVC3 haben, das automatisch für einen Modellordner deserialisiert wird und zu groß ist, ist hier eine Lösung.
Vielen Dank an http://blog.naver.com/techshare/100145191355 und https://gist.github.com/DalSoft/1588818, die mich in die richtige Richtung geführt haben. Der letzte Link auf der ersten Site enthält den vollständigen Quellcode für die Lösung.
quelle
Wenn Sie in View auf diese Art von Problem stoßen, können Sie dieses Problem mithilfe der folgenden Methode beheben. Hier habe ich das Newtonsoft- Paket verwendet.
quelle
quelle
Es scheint, dass es keinen "unbegrenzten" Wert gibt. Der Standardwert beträgt 2097152 Zeichen, was 4 MB Unicode-Zeichenfolgendaten entspricht.
Wie bereits erwähnt, sind 17.000 Datensätze im Browser nur schwer gut zu verwenden. Wenn Sie eine Aggregatansicht präsentieren, ist es möglicherweise viel effizienter, die Aggregation auf dem Server durchzuführen und nur eine Zusammenfassung im Browser zu übertragen. Stellen Sie sich zum Beispiel einen Dateisystem-Browser vor. Wir sehen nur den oberen Rand des Baums und senden dann weitere Anfragen, während wir einen Drilldown durchführen. Die Anzahl der in jeder Anforderung zurückgegebenen Datensätze ist vergleichsweise gering. Eine Baumansicht kann für große Ergebnismengen gut funktionieren.
quelle
Bin gerade darauf gestoßen. Ich bekomme über 6.000 Platten. Ich habe gerade beschlossen, nur ein bisschen zu pagen. Wie in akzeptiere ich eine Seitenzahl in meinem MVC JsonResult-Endpunkt, die standardmäßig auf 0 gesetzt ist, sodass dies nicht erforderlich ist, wie folgt:
Dann anstatt zu sagen:
Ich sage:
Es ist sehr einfach. Dann stattdessen in JavaScript:
Ich sage stattdessen:
Und hängen Sie Ihre Unterlagen an alles an, was Sie mit ihnen gemacht haben. Oder warten Sie einfach, bis alle Anrufe beendet sind, und basteln Sie die Ergebnisse zusammen.
quelle
Ich habe das Problem beim Hinzufügen dieses Codes gelöst:
quelle
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();
Alternative ASP.NET MVC 5 Fix:
(Meins ähnelt der Antwort von MFCs oben mit ein paar kleinen Änderungen)
Ich war noch nicht bereit, zu Json.NET zu wechseln, und in meinem Fall trat der Fehler während der Anforderung auf. Der beste Ansatz in meinem Szenario war das Ändern des tatsächlichen Ansatzes,
JsonValueProviderFactory
der den Fix auf das globale Projekt anwendet und durch Bearbeiten derglobal.cs
Datei als solche erfolgen kann.Fügen Sie einen web.config-Eintrag hinzu:
und erstellen Sie dann die beiden folgenden Klassen
Dies ist im Grunde eine exakte Kopie der Standardimplementierung in,
System.Web.Mvc
jedoch mit dem Zusatz eines konfigurierbaren Web.config-Appsetting-Wertsaspnet:MaxJsonLength
.quelle
verwenden
lib\Newtonsoft.Json.dll
quelle
Lösung für WebForms UpdatePanel:
Fügen Sie Web.config eine Einstellung hinzu:
https://support.microsoft.com/en-us/kb/981884
ScriptRegistrationManager
Klasse enthält folgenden Code:quelle
Wir brauchen keine serverseitigen Änderungen. Sie können dies nur durch die Datei web.config ändern. Dies hat mir geholfen. Probieren Sie es aus
quelle
Fix für ASP.NET MVC: Wenn Sie das Problem nur für eine bestimmte Aktion beheben möchten, die das Problem verursacht, codieren Sie wie folgt:
Sie können dies ändern:
Und die Funktionalität sollte gleich sein, Sie können einfach einen größeren JSON als Antwort zurückgeben.
Erläuterung basierend auf dem ASP.NET MVC-Quellcode: Sie können überprüfen, welche
Controller.Json
Methode im ASP.NET MVC- Quellcode ausgeführt wirdEs ruft eine andere
Controller.Json
Methode auf:wo übergeben
contentType
undcontentEncoding
Objekt sindnull
. Das Aufrufenreturn Json(object)
des Controllers entspricht also im Grunde dem Aufrufenreturn new JsonResult { Data = object, JsonRequestBehavior = sonRequestBehavior.DenyGet }
. Sie können die zweite Form verwenden und parametrierenJsonResult
.Was passiert also, wenn Sie eine
MaxJsonLength
Eigenschaft festlegen (standardmäßig ist sie null)? Es ist überliefert, umJavaScriptSerializer.MaxJsonLength
Eigentum und dannJavaScriptSerializer.Serialize
wird Verfahren genannt :Wenn Sie die
MaxJsonLenght
Eigenschaft des Serializers nicht festlegen , wird ein Standardwert von nur 2 MB verwendet.quelle
Wenn dieser maxJsonLength-Wert ein int ist, wie groß ist dann sein int 32bit / 64bit / 16bit .... Ich möchte nur sicher sein, was der maximale Wert ist, den ich als meine maxJsonLength festlegen kann
quelle
Sie müssen nicht mit web.config zu tun haben. Sie können die Eigenschaft short während des Catch-Werts der Übergabeliste verwenden. Deklarieren Sie beispielsweise ein Modell wie
hier verwende ich kurze Proportionen wie BC = Barcode BE = Buchausgabe und so weiter
quelle