¿Puedo establecer una longitud ilimitada para maxJsonLength en web.config?

Resuelto Prasad asked hace 15 años • 31 respuestas

Estoy usando la función de autocompletar de jQuery. Cuando intento recuperar la lista de más de 17000 registros (cada uno no tendrá más de 10 caracteres de longitud), se excede la longitud y arroja el error:

Información de excepción:
Tipo de excepción: InvalidOperationException
Mensaje de excepción: Error durante la serialización o deserialización utilizando JSON JavaScriptSerializer. La longitud de la cadena excede el valor establecido en la propiedad maxJsonLength.

¿Puedo establecer una longitud ilimitada para maxJsonLengthin web.config? Si no, ¿cuál es la longitud máxima que puedo establecer?

Prasad avatar Jul 20 '09 13:07 Prasad
Aceptado

NOTA: esta respuesta se aplica solo a los servicios web; si devuelve JSON desde un método de controlador, asegúrese de leer también esta respuesta SO a continuación: https://stackoverflow.com/a/7207539/1246870


La propiedad MaxJsonLength no puede ser ilimitada; es una propiedad entera cuyo valor predeterminado es 102400 (100k).

Puede configurar la MaxJsonLengthpropiedad en su web.config:

<configuration> 
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="50000000"/>
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration> 
Christian C. Salvadó avatar Jul 20 '2009 06:07 Christian C. Salvadó

Si está utilizando MVC 4 , asegúrese de consultar esta respuesta también.


Si aún recibe el error:

  • después de establecer la maxJsonLengthpropiedad en su valor máximo en web.config
  • y sabes que la longitud de tus datos es menor que este valor
  • y no está utilizando un método de servicio web para la serialización de JavaScript

Es probable que su problema sea que:

El valor de la propiedad MaxJsonLength se aplica solo a la instancia interna de JavaScriptSerializer que utiliza la capa de comunicación asincrónica para invocar métodos de servicios web. ( MSDN: Propiedad ScriptingJsonSerializationSection.MaxJsonLength )

Básicamente, lo "interno" JavaScriptSerializerrespeta el valor de maxJsonLengthcuando se llama desde un método web; El uso directo de a JavaScriptSerializer(o el uso a través de un método de acción/controlador MVC) no respeta la maxJsonLengthpropiedad, al menos no desde la systemWebExtensions.scripting.webServices.jsonSerializationsección de web.config. En particular, ¡el Controller.Json()método no respeta los ajustes de configuración!

Como solución alternativa, puede hacer lo siguiente dentro de su Controlador (o en cualquier lugar realmente):

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;

Esta respuesta es mi interpretación de esta respuesta del foro asp.net .

David Murdoch avatar Aug 26 '2011 16:08 David Murdoch