为了账号安全,请及时绑定邮箱和手机立即绑定

如何增加 ASP.NET Core Web 应用程序中的 JSON 反序列化 MaxDepth 限制

如何增加 ASP.NET Core Web 应用程序中的 JSON 反序列化 MaxDepth 限制

PHP
慕容森 2024-01-20 15:36:51
我们使用 ASP.NET Core 2.1 和 .NET Framework 4.6.2。我们有一位客户需要将一个相当大的嵌套 json 结构发送到我们的 web 应用程序。当他们进行此调用时,我们将输出以下日志并返回错误:已超出读取器的 MaxDepth 32。路径‘ super.long.path.to property ’,第 1 行,位置 42111。”MaxDepth = 32我浏览了 ASP.NET Core 代码库,并观察到框架提供的反序列化器中的一些引用。是否可以将其配置为不同的深度?
查看完整描述

4 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我还没有测试过这一点,但在 Startup.cs 中你应该能够执行如下操作:


services.AddMvc().AddJsonOptions(options => {

    options.SerializerSettings.MaxDepth = 64;  // or however deep you need

});


查看完整回答
反对 回复 2024-01-20
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

您还可以直接在反序列化中设置所需的深度,如下例所示:


JsonConvert.DeserializeObject< T >(json, new JsonSerializerSettings

{

    MaxDepth = //the value you need

});


查看完整回答
反对 回复 2024-01-20
?
浮云间

TA贡献1829条经验 获得超4个赞

如果您使用的是 .NET Core 3.1,请在startup.cs 文件中尝试此操作。确保安装 Newtonsoft.Json 包。


services.AddMvc().AddNewtonsoftJson(options =>

{

    options.SerializerSettings.MaxDepth = 64;

});


查看完整回答
反对 回复 2024-01-20
?
喵喔喔

TA贡献1735条经验 获得超5个赞

对于 .NET Core 5.0 System.Text.Json:


services.AddMvc().AddJsonOptions(options => 

{

    options.JsonSerializerOptions.MaxDepth = 64;

});


查看完整回答
反对 回复 2024-01-20
  • 4 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信