Json对象序列化与反列化异常问题处理

异常分为两种情况:
1、在前台向后台提交信息的时候。
异常原因:JavaScriptSerializer 反序列化的最大项目数限制默认为1000。可参见:官方说明
处理方法:增大反序列化最大项目数限制。在 Web.config 文件中的 appSettings 节点下加入以下配置:
<add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
注意:度量单位是可以反序列化的项目数,如果您的JSON有500个成员,并且您的限制为400,那么它将失败。不是字节大小 。

解释:
1、HttpRuntimeSection.MaxRequestLength 属性对各种形式的输入流(文件流、json等)作一个统一的最大值限定。配置方法参照:Web.config 配置请求数据大小限制及超时
2、aspnet:MaxJsonDeserializerMembers 配置在上述属性的基础上对Json形式的请求做了进一步的限制,更小的默认配置帮助开发人员简化请求数据以保证更高的响应速度。官方所述将 aspnet:MaxJsonDeserializerMembers 设置为太大的数字可能会带来安全风险,但是并没有指明到底是什么样的安全风险。
附:JavaScriptSerializer 官方文档
2、在后台向前台返回数据的时候,也就是把对象转换成Json的时候。
MVC中处理方法:在返回Json的时候指定Json最大长度大小,默认2097152个字符,相当于4MB,Unicode字符串。代码如下:
        return new JsonResult { Data = obj, MaxJsonLength = Int32.MaxValue };

Web Service中处理方法:在 Web.config 文件中的 configuration 节点下加入以下配置:
<configuration>
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="86753090" />
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration>

使用JavaScriptSerializer:
var serializer = new JavaScriptSerializer() { MaxJsonLength = 86753090 };
serializer.Serialize("Your JSON Contents");