NetCore3.1 Controller中直接返回JObject对象抛出异常解决方案

问题描述

在NetCore 3.1的Web项目中,Controller有一个方法直接返回JObject对象时,抛出了异常
S y s t e m . N o t S u p p o r t e d E x c e p t i o n : T h e c o l l e c t i o n t y p e ′ N e w t o n s o f t . J s o n . L i n q . J O b j e c t ′ i s n o t s u p p o r t e d . \textcolor{red}{System.NotSupportedException : The collection type 'Newtonsoft.Json.Linq.JObject' is not supported.} System.NotSupportedException:ThecollectiontypeNewtonsoft.Json.Linq.JObjectisnotsupported.

这是因为在Web项目中,响应结果的的序列化器使用的System.Text.Json包下的 。它无法直接序列化JObject类型的对象。

问题验证

在Nunit中编写测试方法:

    public void Test2() { //测试序列化 JObject对象JObject obj= new JObject();obj.Add("msg", "主机配置错误,未找到对应门岗");var str= Newtonsoft.Json.JsonConvert.SerializeObject(obj); //Newtonsoft.Json 正常序列化Console.WriteLine(str);str = System.Text.Json.JsonSerializer.Serialize(obj); //System.Text.Json 无法序列化JObject的对象,会抛出异常System.NotSupportedException : The collection type 'Newtonsoft.Json.Linq.JObject' is not supported.//NetCore3.1中是默认使用System.Text.Json 去作为相应的序列化器,这也解释了为什么Controller直接返回JObject对象时,会抛出错误Console.WriteLine(str);}

在这里插入图片描述
运行单元测试方法后,发现Newtonsoft.Json可以正常序列化JObject对象,而System.Text.Json不能序列化JObject 类型的对象。因此需要替换到Web项目中的默认序列化器。

解决方法

在StartUp中的服务配置类中修改默认的关于序列化器的配置。这里需要先安装Nuget包Microsoft.AspNetCore.Mvc.NewtonsoftJson 【NetCore 3.1版本安装的是3.1.32】。这个包提供了对Newtonsoft.Json库的支持。

     public void ConfigureServices(IServiceCollection services){// 配置 Newtonsoft.Json 序列化器 [当Controller直接返回JObject时,因为使用的System.Text.Json作为序列化器,无法序列化JObject对象,会抛出异常]services.AddControllers().AddNewtonsoftJson(options =>{options.SerializerSettings.ContractResolver = new DefaultContractResolver();});}

修改如上配置后,JObject的对象正常返回。

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

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

相关文章

MybatisPlus速成

MybatisPlus快速入门 快速入门入门案例常见注解常见配置 核心功能条件构造器自定义SQLService接口 扩展功能代码生成静态工具逻辑删除枚举处理器JSON处理器 插件功能分页插件通用分页实体 参考文档 mybatis-plus参考文档 全部资料链接 讲义 快速入门 入门案例 <dependency…

【QT入门】 QListWidget各种常见用法详解之列表模式

往期回顾 【QT入门】 Qt代码创建布局之setLayout使用-CSDN博客 【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客 【QT入门】 QTabWidget各种常见用法详解-CSDN博客 【QT入门】 QListWidget各种常见用法详解之列表模式 QListWidget有列表和图标两种显示模式&a…

如何通过vscode连接到wsl

下载wsl扩展 远程连接模式

EDA 全加器设计及例化语句应用

文章目录 前言一、全加器是什么&#xff1f;二、使用步骤1.半加器2.全加器1.新建一个全加器工程2.添加半加器的.v文件到全加器工程中3.新建全加器.v文件&#xff0c;写程序&#xff0c;调用半加器.v文件 完成例化 三、仿真效果总结 前言 提示&#xff1a;这里可以添加本文要记…

【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析

一、引言 在机器学习项目中&#xff0c;数据探索是至关重要的一步。它不仅是模型构建的基础&#xff0c;还是确保模型性能稳定、预测准确的关键。数据探索的过程中&#xff0c;数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息&#xff…

Vue挂载全局方法

简介&#xff1a;有时候&#xff0c;频繁调用的函数&#xff0c;我们需要把它挂载在全局的vue原型上&#xff0c;方便调用&#xff0c;具体怎么操作&#xff0c;这里来记录一下。 一、这里以本地存储的方法为例 var localStorage window.localStorage; const db {/** * 更新…

map与set容器常见操作详解(含示例代码及注意事项)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

hcip实验3——gre配置实验

实验拓扑&#xff1a; 实验内容&#xff1a; PC1; PC2: R1配置&#xff1a; [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]ip add 100.1.1.1 24 [Huawei-GigabitEthernet0/0/1]q [Huawei]sys […

Linux根据时间删除文件或目录

《liunx根据时间删除文件》和 《Linux 根据时间删除文件或者目录》已经讲述了根据时间删除文件或目录的方法。 下面我做一些补充&#xff0c;讲述一个具体例子。以删除/home目录下的文件为例。 首先通过命令&#xff1a; ls -l --time-style"%Y-%m-%d %H:%M:%S"…

【Linux】nmcli命令详解(文末送书)

目录 一、概述 二、常用参数使用 2.1 nmcli networking 1.显示NM是否接管网络 2.查看网络连接状态 3.开/关网络连接 2.2 general ​编辑 1.显示系统网络状态 2.显示主机名 3.更改主机名 2.3 nmcli connection ​编辑1.显示所有网络连接 2.显示某个网卡的详细信息…

基于微信小程序的民宿短租系统设计与实现(论文+源码)_kaic

摘 要 随着社会的发展&#xff0c;出差、旅游成为常态&#xff0c;也就造成民宿短租市场的兴起。人们新到陌生的环境里找民宿一般都是通过中介。中介虽然可以快速找到合适的民宿但会收取大量的中介费用&#xff0c;这对刚到新环境里的人们来说是一笔大的资金支出。也有一些人通…

【算法笔记】LeetCode_86 分隔链表

LeetCode_86 分隔链表 LeetCode_86 分隔链表 题目描述 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff…