737 Stimmen

Kann ich eine unbegrenzte Länge für maxJsonLength in web.config festlegen?

Ich verwende die Autocomplete-Funktion von jQuery. Wenn ich versuche, die Liste von mehr als 17000 Datensätze abzurufen (jeder wird nicht mehr als 10 Zeichen Länge haben), es ist die Länge überschreiten und wirft den Fehler:

Informationen zu Ausnahmen:
Art der Ausnahme: InvalidOperationException
Ausnahmemeldung: Fehler bei der Serialisierung oder Deserialisierung mit dem JSON JavaScriptSerializer. Die Länge der Zeichenfolge überschreitet den Wert der Eigenschaft maxJsonLength.

Kann ich eine unbegrenzte Länge festlegen für maxJsonLength において web.config ? Wenn nicht, was ist die maximale Länge, die ich einstellen kann?

802voto

Christian C. Salvadó Punkte 763569

HINWEIS: Diese Antwort gilt nur für Webdienste. Wenn Sie JSON von einer Controller-Methode zurückgeben, lesen Sie unbedingt auch diese SO-Antwort unten: https://stackoverflow.com/a/7207539/1246870


Die MaxJsonLength kann nicht unbegrenzt sein und ist eine Ganzzahl-Eigenschaft, die standardmäßig 102400 (100k) beträgt.

Sie können die MaxJsonLength Eigenschaft in Ihrer web.config:

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

518voto

David Murdoch Punkte 85120

Wenn Sie MVC verwenden 4 sollten Sie sich unbedingt ansehen diese Antwort auch.


Wenn Sie die Fehlermeldung weiterhin erhalten:

  • nach der Einstellung der maxJsonLength Eigenschaft auf den maximalen Wert in web.config
  • und Sie wissen, dass die Länge Ihrer Daten kleiner als dieser Wert ist
  • und Sie verwenden keine Webdienstmethode für die JavaScript-Serialisierung

Ihr Problem ist wahrscheinlich, dass:

Der Wert der Eigenschaft MaxJsonLength gilt nur für die interne JavaScriptSerializer-Instanz, die von der asynchronen Kommunikationsschicht zum Aufrufen von Webdienstmethoden verwendet wird. ( MSDN: ScriptingJsonSerializationSection.MaxJsonLength Eigenschaft )

Im Grunde ist die "interne" JavaScriptSerializer respektiert den Wert von maxJsonLength wenn sie von einer Web-Methode aufgerufen wird; die direkte Verwendung einer JavaScriptSerializer (oder über eine MVC-Action-Methode/Controller verwenden) tut no respektieren die maxJsonLength Eigenschaft, zumindest nicht in der systemWebExtensions.scripting.webServices.jsonSerialization Abschnitt der web.config. Insbesondere muss die Controller.Json() Methode nicht Beachten Sie die Konfigurationseinstellung!

Als Abhilfe können Sie in Ihrem Controller (oder überall sonst) Folgendes tun:

var serializer = new JavaScriptSerializer();

// For simplicity just use Int32's max value.
// You could always read the value from the config section mentioned above.
serializer.MaxJsonLength = Int32.MaxValue;

var resultData = new { Value = "foo", Text = "var" };
var result = new ContentResult{
    Content = serializer.Serialize(resultData),
    ContentType = "application/json"
};
return result;

Diese Antwort ist meine Interpretation von diese asp.net-Forum-Antwort .

386voto

fanisch Punkte 3918

In MVC 4 können Sie das tun:

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
    return new JsonResult()
    {
        Data = data,
        ContentType = contentType,
        ContentEncoding = contentEncoding,
        JsonRequestBehavior = behavior,
        MaxJsonLength = Int32.MaxValue
    };
}

in Ihrem Controller.

Zusatz:

Für alle, die sich über die anzugebenden Parameter wundern, könnte ein Aufruf wie folgt aussehen:

Json(
    new {
        field1 = true,
        field2 = "value"
        },
    "application/json",
    Encoding.UTF8,
    JsonRequestBehavior.AllowGet
);

72voto

Ravi Anand Punkte 4489

Wenn Sie nach der web.config-Einstellung immer noch einen Fehler wie den folgenden erhalten:

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

Ich habe es folgendermaßen gelöst:

   public ActionResult/JsonResult getData()
   {
      var jsonResult = Json(superlargedata, JsonRequestBehavior.AllowGet);
      jsonResult.MaxJsonLength = int.MaxValue;
      return jsonResult;
    }

Ich hoffe, das hilft.

65voto

M4N Punkte 92235

Sie können die maximale Länge für json-Anfragen in Ihrer web.config-Datei konfigurieren:

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

Der Standardwert für maxJsonLength ist 102400 . Weitere Einzelheiten finden Sie auf dieser MSDN-Seite: http://msdn.microsoft.com/en-us/library/bb763183.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X