8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

我可以在 web.config 中为 maxJsonLength 设置无限长度吗?

Mouad Slimane 2月前

319 0

我正在使用 jQuery 的自动完成功能。当我尝试检索超过 17000 条记录的列表(每条记录的长度不超过 10 个字符)时,它超出了长度并引发错误:...

我正在使用 jQuery 的自动完成功能。当我尝试检索超过 17000 条记录的列表(每条记录的长度不超过 10 个字符)时,它超出了长度并引发错误:

异常信息:
异常类型:InvalidOperationException
异常消息:使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超出了 maxJsonLength 属性上设置的值。

设置无限长度吗 maxJsonLength in web.config ?如果不行,我可以设置的最大长度是多少?

帖子版权声明 1、本帖标题:我可以在 web.config 中为 maxJsonLength 设置无限长度吗?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mouad Slimane在本站《image》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 需要提一下的一点可能非常明显,所以如果您已经想到了,请原谅我;Json 字符串还包括每个记录周围的花括号、每个字段名称 [和值] 周围的引号以及字段名称和值。因此,将字段名称设置为单个字符可能会很有用,同时还要确保如果值不是字符串,则正确设置字段类型以使其不包含引号。

  • 注意: 此答案仅适用于 Web 服务,如果您从 Controller 方法返回 JSON,请确保您也阅读了下面的 SO 答案: https://.com/a/7207539/1246870


    属性 MaxJsonLength 不能是无限制的,是一个整数属性,默认为 102400(100k)。

    您可以 MaxJsonLength 在 web.config 上设置属性:

    <configuration> 
       <system.web.extensions>
           <scripting>
               <webServices>
                   <jsonSerialization maxJsonLength="50000000"/>
               </webServices>
           </scripting>
       </system.web.extensions>
    </configuration> 
    
  • L.T. 2月前 0 只看Ta
    引用 4

    @kmcc049,在我看来这些值并没有错,因为如果你看一下这个问题,你会发现 OP 并没有问“maxJsonLength 的默认值是多少?”(顺便说一句,第二个获得最多投票的答案回答了这个问题,这是错误的问题),他试图将此属性设置为“unlimited”,但由于是一个整数,所以可能的最大值是 2147483647,正如 @depsart 和 @Descár 指出的那样。

  • 很好,但是如果你在使用 MVC 的 return Json() 或其他东西时遇到这个问题,请注意下面@David Murdoch 的回答

  • @ Dercsár:这有什么意义?2147483644 是能被 1024 整除的最大整数。

  • 如果您正在使用 MVC 4 ,请务必查看 这个答案


    如果您仍然收到错误:

    • 设置 maxJsonLength 为最大值
    • 并且你知道你的数据的长度小于这个值
    • 并且您没有使用 Web 服务方法进行 JavaScript 序列化

    你的问题可能是:

    MaxJsonLength 属性的值仅适用于异步通信层用于调用 Web 服务方法的内部 JavaScriptSerializer 实例。 ( MSDN: ScriptingJsonSerializationSection.MaxJsonLength Property )

    基本上,当从 Web 方法调用时,\'internal\' JavaScriptSerializer 会尊重 的值 maxJsonLength ;直接使用 JavaScriptSerializer (或通过 MVC 操作方法/Controller 使用) 不会 尊重 maxJsonLength 属性,至少不会尊重来自 systemWebExtensions.scripting.webServices.jsonSerialization web.config 部分的值。特别是,Controller.Json () 方法 不会 尊重配置设置!

    作为一种解决方法,您可以在控制器中(或任何地方)执行以下操作:

    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;
    

    这个答案是我对这个 asp.net 论坛答案的解释。

  • 哇,微软似乎疏忽了,没有让 Json() 方法遵守 web.config 的序列化长度设置。谢谢你的回答,这真是太有效了!

  • 我一直在尝试 web.config 选项,所以一直在碰壁。由于我正在处理 webservice,只有一行代码对我有帮助,那就是将 Int32.Maxvalue 分配给 JavascriptSerializer()。非常感谢

  • 引用 10

    我也有返回 Json(data) 的问题。但解决方法更简单:var jsonResult = Json(res); jsonResult.MaxJsonLength = int.MaxValue; return jsonResult;

  • 在 MVC 4 中你可以执行以下操作:

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

    在你的控制器中。

    添加:

    对于那些对需要指定的参数感到困惑的人来说,调用可能看起来像这样:

    Json(
        new {
            field1 = true,
            field2 = "value"
            },
        "application/json",
        Encoding.UTF8,
        JsonRequestBehavior.AllowGet
    );
    
  • 这也可以通过将 \'MaxJsonLength = Int32.MaxValue\' 添加到单个操作结果来实现。如果不希望更改控制器或项目范围。

  • 警告:此解决方案禁用响应的压缩(如果请求)。 在您的操作中添加此过滤器:.com/questions/3802107/…

  • 如果在 web.config 设置后仍然收到如下错误

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

    我通过以下方式解决了它:

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

    我希望这会有所帮助。

  • 在 web.config 中设置 maxJsonLength 是不必要的,设置 jsonResult.MaxJsonLength 就足够了(至少对我来说是这样的(MVC5))

  • 引用 16

    您可以在 web.config 文件中配置 json 请求的最大长度:

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

    maxJsonLength 的默认值为 102400 。有关更多详细信息,请参阅此 MSDN 页面: http://msdn.microsoft.com/en-us/library/bb763183.aspx

  • 这个整数中存储的值代表什么?这是某种字符计数吗?我想我要问的是,为什么要使用整数?谢谢!

  • @eaglei22 该数字表示 maxJsonLength 可以使用多少字节。正如 M4N 所提到的,默认值为 102400(100KB)。

  • 我在 ASP.NET Web Forms 中遇到了这个问题。它完全忽略了 web.config 文件设置,所以我这样做了:

            JavaScriptSerializer serializer = new JavaScriptSerializer();
    
            serializer.MaxJsonLength = Int32.MaxValue; 
    
            return serializer.Serialize(response);
    

    当然,总的来说,这是很糟糕的做法。如果你在 Web 服务调用中发送这么多数据,你应该考虑采用不同的方法。

  • @KorayDurudogan - 我将其放入返回响应的 Ajax 方法中,因此放在我的控制器中。希望有帮助!

返回
作者最近主题: