.net 5.0 webapi 返回json循环引用导致接口报错500解决方案

 

(我也是第一次遇到这个问题,所以记录一下)

问题描述:当我们需要返回嵌套资源,而嵌套资源就有可能导致循环依赖、循环引用的问题,就导致了Json序列化死循环,从而导致服务器返回500。这种情况出现的原因是 .net core 5.0 默认返回json的深度为32 超过32就会报错(32位个人理解 a中有一个b集合,b中有c集合,c中有d集合,一致嵌套至32层)

解决方案

1、使Dto减少json深度(推荐)

使用dto,将自己需要的数据通过automapper映射到dto中,返回dto就不会循环。之所以推荐就是因为我们所需的数据往往不会嵌套至32层,这是最合理的解决方案

2、在starup文件的ConfigureServices中进行如下配置

如果你所需的资源确实超过了32层,可以加深深度来解决,在这里还可以对返回的结果进行其它配置 ,具体见微软官方文档

  services.AddControllers()
              .AddJsonOptions(options =>
              {
                   //json循环最大深度 如果你所需的资源确实超过了32层,可以加深深度来解决
                   options.JsonSerializerOptions.MaxDepth = 64;
                   //null值不序列化为json  
                   options.JsonSerializerOptions.IgnoreNullValues = true;
                   
              });

3、忽略循环引用

1):安装 Microsoft.AspNetCore.MVC.Newtonsoft.Json

2):在starup文件的ConfigureServices中进行如下配置

services.AddControllersWithViews()
          .AddNewtonsoftJson(options =>
          {
               //忽略循环引用   
               options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
          });

 

posted @   洒洒水啦  阅读(858)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示