做网站页面设计报价,wordpress怎么改为中文,百度推广管理平台,网络规划设计师大纲前言看到一篇文章《Asp-Net-Core开发笔记#xff1a;接口返回json对象出现套娃递归问题》原文是使用 NewtonsoftJson 解决的返回json对象出现套娃递归问题#xff1a;services.AddControllersWithViews().AddNewtonsoftJson(options {options.SerializerSettings.Refere… 前言看到一篇文章《Asp-Net-Core开发笔记接口返回json对象出现套娃递归问题》原文是使用 NewtonsoftJson 解决的返回json对象出现套娃递归问题services.AddControllersWithViews().AddNewtonsoftJson(options {options.SerializerSettings.ReferenceLoopHandling ReferenceLoopHandling.Ignore;});其实默认使用的 System.Text.Json 已经提供了相关属性解决这一问题。重现问题按照那篇文章的描述我们创建 API, 重现错误[HttpGet]
public ActionResultListCrawlTask GetAll()
{//模拟数据var crawlTask new CrawlTask { Name 爬虫名称, UserId 0f3d4b2f-3b4e-4d08-8f4c-0009a316f041 };var user new User { Name 用户名, CrawlTasks new ListCrawlTask { crawlTask } };crawlTask.User user;return new ListCrawlTask { crawlTask };
}解决问题.NET 5同样需要在服务配置里面添加代码services.AddControllers().AddJsonOptions(options options.JsonSerializerOptions.ReferenceHandler ReferenceHandler.Preserve);序列化时它会将元数据属性添加到 JSON看起来像这样因此需要确保反序列化程序知道如何正确处理这些元数据属性var crawlTask JsonSerializer.DeserializeCrawlTask(json, new JsonSerializerOptions
{ReferenceHandler ReferenceHandler.Preserve
});.NET 6而在 .NET 6 中新增了 IgnoreCycles 方式builder.Services.AddControllers().AddJsonOptions(options options.JsonSerializerOptions.ReferenceHandler ReferenceHandler.IgnoreCycles);序列化时会导致套娃递归的属性直接变成null这和原文达到的效果一致。结论今天我们使用 System.Text.Json 解决了套娃递归问题但是前提是需要使用 .NET 6。想了解更多内容请关注我的个人公众号”My IO“