Json对象序列化与反列化异常问题处理
- .Net
- 2020-07-22
- 17热度
- 0评论
异常分为两种情况:
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 设置为太大的数字可能会带来安全风险,但是并没有指明到底是什么样的安全风险。
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");

鲁ICP备19063141号
鲁公网安备 37010302000824号