it-swarm.com.de

Die Länge der Zeichenfolge überschreitet den in der Eigenschaft maxJsonLength festgelegten Wert

Ich lade Tab-Inhaltsdaten durch die jQuery-Methode ajax über die Webmethode mit etwa 200-300 Datensätzen. Folgende Fehlermeldung wird in der Konsole angezeigt:

Fehler: Sys.Net.WebServiceFailedException: Sys.Net.WebServiceFailedException: System.InvalidOperationException -- Fehler bei der Serialisierung oder Deserialisierung mit JSON JavaScriptSerializer. Die Länge der Zeichenfolge überschreitet den eingestellten Wert auf der Eigenschaft maxJsonLength.

Das Ändern der Länge des maxJsonLength-Attributs in Web.config hilft nicht. 

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

Kann mir jemand helfen das zu lösen?

23

JavaScriptSerialzer hat eine öffentliche Eigenschaft namens MaxJsonLength

http://msdn.Microsoft.com/de-de/library/system.web.configuration.scriptingjsonserializationsection.maxjsonlength.aspx

Wo Sie jetzt Ihren Json deserialisieren, verwenden Sie dies

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);

Und das sollte perfekt funktionieren, ich habe dies kürzlich durch Msdn herausgefunden und ein Problem gelöst, das mich lange Zeit nervte.

31

Ich weiß, dass dies zum Zeitpunkt meines Lesens ein sehr alter Thread ist, und dass WebMethod in ASP.NET MVC nicht wirklich eine Sache ist, also ist dies etwas tangential. Aber wenn jemand darüber stößt - 

Wenn Sie ASP.NET MVC verwenden, gibt es eine Alternative zum direkten Aufrufen von JavaScriptSerializer, dh, die JsonResult zu initialisieren und die MaxJsonLength-Eigenschaft für das Ergebnis selbst festzulegen:

    private JsonResult GetReallyBigJsonResult(object data, JsonRequestBehavior requestBehavior)
    {
            return new JsonResult()
            {
                ContentEncoding = Encoding.Default,
                ContentType = "application/json",
                Data = data,
                JsonRequestBehavior = requestBehavior,
                MaxJsonLength = int.MaxValue
            };

    }
5
lewiSnort

Sie kennen die Größe Ihrer Zeichenfolge nicht, überschreiten aber möglicherweise die von Ihnen festgelegte Höchstgrenze?

Idealerweise sind Ajax-Szenarien nur für kleine bis mittlere serverseitige Aufrufe gedacht, die nicht dazu dienen, Tonnen von Daten zu erhalten.

hier für eine Alternative

0
Riain McAtamney