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


Estoy usando la función de autocompletar de jQuery. Cuando trato de recuperar la lista de más de 17000 registros (cada uno no tendrá más de 10 caracteres), está excediendo 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 usando JSON JavaScriptSerializer. La longitud de la cadena excede el valor establecido en la propiedad maxJsonLength.

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


560
2017-07-20 06:38


origen


Respuestas:


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


los MaxJsonLength la propiedad no puede ser ilimitada, es una propiedad entera que por defecto es 102400 (100k).

Puede establecer la propiedad MaxJsonLength en su web.config:

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

631
2017-07-20 06:43



Si estás usando MVC 4, asegúrate de revisar esta respuesta también.


Si aún recibes el error:

  • después de configurar el maxJsonLength propiedad a 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

su problema es probable que:

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

Básicamente, el "interno" JavaScriptSerializer respeta el valor de maxJsonLength cuando se llama desde un método web; uso directo de un JavaScriptSerializer (o el uso a través de un MVC action-method / Controller) no no respeta el maxJsonLength propiedad, al menos no de la systemWebExtensions.scripting.webServices.jsonSerialization sección de web.config.

Como solución, 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.


404
2017-08-26 16:04



En MVC 4 puedes hacer:

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

en tu controlador.


283
2017-09-05 10:03



Puede configurar la longitud máxima para las solicitudes json en su archivo web.config:

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

El valor predeterminado para maxJsonLength es 102400. Para obtener más detalles, consulte esta página de MSDN: http://msdn.microsoft.com/en-us/library/bb763183.aspx


57
2017-07-20 06:43



Estaba teniendo este problema en ASP.NET Web Forms. Estaba ignorando por completo la configuración del archivo web.config, así que hice esto:

        JavaScriptSerializer serializer = new JavaScriptSerializer();

        serializer.MaxJsonLength = Int32.MaxValue; 

        return serializer.Serialize(response);

Por supuesto, en general esta es una práctica terrible. Si está enviando esta cantidad de datos en una llamada de servicio web, debe considerar un enfoque diferente.


30
2017-08-20 19:34



Lo arreglé.

//your Json data here
string json_object="........";
JavaScriptSerializer jsJson = new JavaScriptSerializer();
jsJson.MaxJsonLength = 2147483644;
MyClass obj = jsJson.Deserialize<MyClass>(json_object);

Funciona muy bien.


20
2017-10-18 13:27



si aún recibe el error después de la configuración de web.config como sigue:    

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

Lo resolví siguiendo:

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

Espero que esto ayude


18
2017-09-19 09:44