接口返回json对象出现套娃递归问题 | System.Text.Json 版本

前言

看到一篇文章《Asp-Net-Core开发笔记:接口返回json对象出现套娃递归问题》

842217030f730454af886f666280feee.png

原文是使用 NewtonsoftJson 解决的返回json对象出现套娃递归问题:

services.AddControllersWithViews().AddNewtonsoftJson(options => {options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;});

其实,默认使用的 System.Text.Json 已经提供了相关属性解决这一问题。

重现问题

按照那篇文章的描述,我们创建 API, 重现错误:

[HttpGet]
public ActionResult<List<CrawlTask>> GetAll()
{//模拟数据var crawlTask = new CrawlTask { Name = "爬虫名称", UserId= "0f3d4b2f-3b4e-4d08-8f4c-0009a316f041" };var user = new User { Name = "用户名", CrawlTasks = new List<CrawlTask> { crawlTask } };crawlTask.User = user;return new List<CrawlTask> { crawlTask };
}

22b7e6d9d94662d6fcd5989362d68d17.png

解决问题

.NET 5

同样,需要在服务配置里面添加代码:

services.AddControllers().AddJsonOptions(options =>options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve);

序列化时,它会将元数据属性添加到 JSON,看起来像这样:

60db721f8ea6ffe71af4d066d2d92644.png

因此,需要确保反序列化程序知道如何正确处理这些元数据属性:

var crawlTask = JsonSerializer.Deserialize<CrawlTask>(json, new JsonSerializerOptions
{ReferenceHandler = ReferenceHandler.Preserve
});

.NET 6

而在 .NET 6 中,新增了 IgnoreCycles 方式:

builder.Services.AddControllers().AddJsonOptions(options =>options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);

序列化时,会导致套娃递归的属性直接变成null:

631cc7c9d79573f6b4940f4b66985410.png

这和原文达到的效果一致。

结论

今天,我们使用 System.Text.Json 解决了套娃递归问题,但是前提是需要使用 .NET 6。

想了解更多内容,请关注我的个人公众号”My IO“

625dbca7cc8fb5ffa8ccf0a20b0b9adf.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高效性跨平台分布式软件开发技术——gRPC

文章目录1. gRPC&#xff08;google Remote Procedure Call&#xff09; 技术 —— 高效性地跨平台、跨语言开发2. 基于 python 实现 gRPC 框架2.1 一个 gPRC 项目必须包含的几大部分2.2 helloworld.proto 文件——定义全局可调用函数及其参数数据结构2.3 server.py 文件——实…

在VS中设置比较和谐的字体和颜色的方法

作者&#xff1a;朱金灿来源&#xff1a;http://blog.csdn.net/clever101先在studiostyl.es网站选择你喜欢的字体方案&#xff0c;我个人比较喜欢这款&#xff1a;Humane Studio&#xff0c;注意在网页上选择你使用VS版本&#xff0c;然后单击Downlaod this scheme就可以了&…

C和指针之字符串strchr、strpbrk、strstr

1、strchr、strpbrk、strstr 1) char *strchr(const char *s, int c); 在s中找字符c 第一次出现的地方,返回这个指向该位置的指针,没找到返回NULL 2) char *strrchr(const char *s, int c); 在s中最右边找字符c 第一次出现的地方,返回这个指向该位置的指针,没…

一个脚本实现全量增量备份,并推送到远端备份中心服务器

2019独角兽企业重金招聘Python工程师标准>>> 摘要 由于工作需要&#xff0c;刚好需要这样一个功能的脚本&#xff0c;主要解决&#xff1a; 1. 不想在crontab中调度两条备份任务&#xff0c;一个做全量一个做增量 2. 如果每小时做增量&#xff0c;凌晨4点做全量&…

.NET 7 预览版 2 已发布,NativeAOT 正式可用

.NET 7 Preview 2 已发布&#xff0c;第二个预览版包括对 RegEx 源生成器的增强、将 NativeAOT 从实验状态转移到运行时的进展&#xff0c;以及对“dotnet new”CLI SDK 的一系列重大改进。在此下载适用于 Windows、macOS 和 Linux 的 .NET 7 Preview 2 。引入新的正则表达式源…

地壳中元素含量排名记忆口诀_Nature:利用熔融包裹体的元素和同位素示踪俯冲带流体来源...

Nature&#xff1a;利用熔融包裹体的元素和同位素示踪俯冲带流体来源在汇聚板块边缘&#xff0c;大洋岩石圈通过俯冲作用携带挥发分(尤其是水)进入地幔。这些俯冲下去的水/流体控制着岩浆产物、地震活动、陆壳形成和资源成矿。但是&#xff0c;识别不同流体的来源(沉积物&#…

Windows 10开发基础——文件、文件夹和库(一)

Windows 10开发基础——文件、文件夹和库&#xff08;一&#xff09; 原文:Windows 10开发基础——文件、文件夹和库&#xff08;一&#xff09;主要内容&#xff1a; 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和…

Sigmoid函数与逻辑回归

文章目录(1). Sigmoid函数的由来——伯努利分布的衍生物1.1 为什么会有 sigmoid 函数的出现&#xff1f;1.2 sigmoid 函数推导过程1.3 sigmoid 函数求导(2). 逻辑回归&#xff08;Logistic Regression&#xff09;2.1 逻辑回归算法的最终本质——求决策边界2.2 逻辑回归算法中的…

C和指针之字符串实现strrstr函数

1、问题 实现strrstr(const char *str, const char *str2)函数,就是从最右边开始,找到第一次出现字符str2,然后返回指向这个字符的指针,找不到返回NULL,str2和str1一个为NULL 返回 NULL 2、思路 我们用2个变量, 先用strstr一个变量找一个保存当前地址,然后再用strstr去…

括号匹配

CTRL SHIFTP 括号匹配

react connect

connect([mapStateToProps], [mapDispatchToProps], [mergeProps],[options])连接 React 组件与 Redux store。连接操作不会改变原来的组件类&#xff0c;反而返回一个新的已与 Redux store 连接的组件类。参数[mapStateToProps(state, [ownProps]): stateProps] (Function): 如…

Avalonia跨平台入门第二十二篇之人脸检测

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题、玩…

pkpm板按弹性计算还是塑性_PKPM中的S\R验算显红原因分析

PKPM软件砼结构施工图中的&#xff0c;梁的配筋面积中&#xff0c;SR验算&#xff0c;经常会有个别构件显红的情况。查了一下PKPM说明书&#xff0c;并没有针对此情况的详细说明。根据本人的实际经验&#xff0c;总结了一下解决此问题的主要方法&#xff1a;一.超筋SR的值显示为…

C和指针之字符串strspn、strcspn函数源代码的实现

1、strspn strcspn介绍 1)size_t strspn(const char *str, const char * accept); 我的理解是字符串str中前面连续的字符有多少在accept中,如果哪一个没在accept中,就到这里结束了,后面不比了,比如 char *str = "xnufux dfafa"; char accept = "linux"…

StackExchange.Redis 使用 (一)

在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类&#xff0c; 它存在于StackExchange.Redis命名空间中。这个类隐藏了Redis服务的操作细节&#xff0c;ConnectionMultiplexer类做了很多东西&#xff0c; 在所有调用之间它被设计为共享和重用的。不应该为每一个操…

多智能体连续行为空间问题求解——MADDPG

目录1. 问题出现&#xff1a;连续行为空间出现2. DDPG 算法2.1 DDPG 算法原理2.2 DDPG 算法实现代码2.2.1 Actor & Critic2.2.2 Target Network2.2.3 Memory Pool2.2.4 Update Parameters&#xff08;evaluate network&#xff09;2.2.5 Update Parameters&#xff08;targ…

在.NET 6 中如何创建和使用 HTTP 客户端 SDK

如今&#xff0c;基于云、微服务或物联网的应用程序通常依赖于通过网络与其他系统通信。每个服务都在自己的进程中运行&#xff0c;并解决一组有限的问题。服务之间的通信是基于一种轻量级的机制&#xff0c;通常是一个 HTTP 资源 API。从.NET 开发人员的角度来看&#xff0c;我…

C和指针之字符串strtok函数

1、strtok函数 头文件&#xff1a;#include <string.h>定义函数&#xff1a;char * strtok(char *s, const char *delim);函数说明&#xff1a;strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串&#xff0c;参数delim 则为分割字符串&#xff0c;当strto…

#CSS# 初识CSS

CSS&#xff1a;Cascading Style Sheet &#xff08;层叠样式表&#xff09; CSS的内容可以分开写入CSS文件中&#xff0c;PHP文件中加入以下语句即可&#xff1a; <link herf"css/style.css" type"text/css" rel"stylesheet"/> 其中&…

js隐藏div

页面上有一个div&#xff0c;用JQuery隐藏<div id"hid_div" class"divID">解决方法&#xff1a;(1)用js&#xff1a;document.getElementById(hid_div).style.display "none";(2)jQuery:${.divID}.hid();ps:如果用方法&#xff08;1&…