maxJsonLength 和 MaxJsonDeserializerMembers 之间有什么区别?

Mar*_*ijn 6 asp.net-mvc json

我们可以通过两种方式在 web.config 中设置最大 json 长度:

1:以字节为单位

<configuration>
  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="500000">
        </jsonSerialization>
      </webServices>
    </scripting>
  </system.web.extensions>
</configuration>
Run Code Online (Sandbox Code Playgroud)

2:在应用程序设置中。json 对象中的最大条目(本例为 150,000)

<add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
Run Code Online (Sandbox Code Playgroud)

我想知道,什么时候使用哪个?我总是需要两者吗?这两个人是以某种方式相互合作的吗?

Nko*_*osi 5

根据定义,这里是有问题的两个设置。

  1. JavaScriptSerializer.MaxJsonLength

    获取或设置 JavaScriptSerializer 类接受的 JSON 字符串的最大长度。

  2. aspnet:MaxJsonDeserializerMembers

    指定JavaScriptSerializer 类型反序列化的任何字典中可以出现的最大项目数的限制。

也就是说,看看这个答案

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

以及答主的解读

基本上,当从 Web 方法调用时,“内部” JavaScriptSerializer 尊重 maxJsonLength 的值;直接使用 JavaScriptSerializer(或通过 MVC action-method/Controller 使用)不尊重 maxJsonLength 属性,至少不是来自 web.config 的 systemWebExtensions.scripting.webServices.jsonSerialization 部分。