Visual Studio 2022添加服务引用如何改用System.Text.Json序列化
Visual Studio生成OpenAPI客户端默认使用System.Text.Json的配置方案
Visual Studio 2022的「添加服务引用」功能基于NSwag实现OpenAPI客户端代码生成,旧版本默认使用Newtonsoft.Json作为序列化库,可通过以下方式调整为使用System.Text.Json,和ASP.NET Core 6 Web API的全局序列化配置保持一致:
方案1:添加服务引用时直接选择序列化库(推荐)
- 将Visual Studio 2022升级到17.2及以上稳定版本,该版本开始在OpenAPI服务引用配置页内置了序列化库选择项
- 右键项目「依赖项」节点,选择「添加」-「服务引用」,选中「OpenAPI」类型进入配置界面
- 填写OpenAPI源地址、生成类的命名空间、客户端类名等基础信息后,找到页面下方的「序列化库」下拉菜单
- 下拉选择System.Text.Json后点击完成,生成的客户端代码将直接依赖System.Text.Json实现序列化,不会引入Newtonsoft.Json相关包引用。
若你使用的是低于17.2的Visual Studio 2022版本,看不到该选项,可选择升级IDE,或使用下面的手动修改方案。
方案2:修改已生成的客户端代码
如果已经生成了基于Newtonsoft.Json的客户端,无需重新生成,直接调整序列化逻辑即可:
- 卸载项目中自动引入的
Newtonsoft.JsonNuGet包 - 打开自动生成的客户端代码文件(默认存放在项目的
Connected Services/OpenAPI路径下),做如下替换:- 删除所有
using Newtonsoft.Json;引用,添加using System.Text.Json;引用 - 将所有
JsonConvert.SerializeObject(xxx)调用替换为JsonSerializer.Serialize(xxx, jsonOptions),其中jsonOptions是和你Web API项目全局配置完全一致的JsonSerializerOptions实例,需保持命名策略、日期格式、空值处理等配置统一 - 将所有
JsonConvert.DeserializeObject<T>(xxx)调用替换为JsonSerializer.Deserialize<T>(xxx, jsonOptions)
- 删除所有
- 建议将
JsonSerializerOptions定义为静态公共实例,避免重复配置,同时保证客户端和服务端序列化规则完全匹配,减少序列化错误。
方案3:通过NSwag命令行生成(适合CI/自动化场景)
如果需要在构建流程中自动生成客户端代码,或者需要更灵活的自定义配置,可直接使用NSwag命令行工具指定序列化器生成代码:
- 全局安装NSwag命令行工具:
dotnet tool install NSwag.ConsoleCore --global - 编写NSwag生成配置文件,在配置中明确指定
jsonLibrary: SystemTextJson,同时可自定义命名空间、类名等生成规则 - 执行
nswag run命令即可生成完全基于System.Text.Json的客户端代码,无需手动修改。
内容的提问来源于stack exchange,提问作者Franco Tiveron
相关产品推荐
相关产品推荐

