Swagger UI 不使用 Newtonsoft.Json 序列化十进制,而是使用 System.Text.json
Posted
技术标签:
【中文标题】Swagger UI 不使用 Newtonsoft.Json 序列化十进制,而是使用 System.Text.json【英文标题】:Swagger UI is not using Newtonsoft.Json to serialize decimal, instead using System.Text.json 【发布时间】:2021-09-21 00:18:46 【问题描述】:当 POCO 类以下的“Salary”字段的十进制值为 12000M(十进制值)时,Swagger UI 将 JSON 属性值显示为 12000。 而预期的 JSON 属性值为 12000.0(即尾随零)。
在startup.cs的“ConfigureServices(IServiceCollection services)”方法中使用了如下代码:
services.AddControllers().AddNewtonsoftJson(options =>
options.SerializerSettings.FloatParseHandling = FloatParseHandling.Decimal;
options.SerializerSettings.FloatFormatHandling = FloatFormatHandling.DefaultValue;
);
services.AddControllersWithViews().AddNewtonsoftJson(options =>
options.SerializerSettings.FloatParseHandling = FloatParseHandling.Decimal;
options.SerializerSettings.FloatFormatHandling = FloatFormatHandling.DefaultValue;
);
也使用了以下代码 sn-p,但 Swagger UI 中没有出现预期的输出。 (在 Swashbuckle.AspNetCore.Newtonsoft V6.1.4.0 中)
services.AddAwaggerGenNewtonsoftSupport();
当上面的代码 sn-p 不起作用时,也尝试跟随。 但是没有运气。
services.AddMvc().AddNewtonsoftJson(options =>
options.SerializerSettings.FloatParseHandling = FloatParseHandling.Decimal;
options.SerializerSettings.FloatFormatHandling = FloatFormatHandling.DefaultValue;
);
类:
public class Employee
public string EmployeeName get; set;
public decimal Salary get; set;
public string Department get; set;
看起来,即使添加了上述代码 sn-p,Swagger UI 也没有使用 Newtonsoft.Json 序列化十进制,而是使用 System.Text.json。
.Net Core 版本为 3.1
【问题讨论】:
【参考方案1】:安装这个包
Install-Package Swashbuckle.AspNetCore.Newtonsoft -Version 6.2.3
然后添加这一行
builder.Services.AddSwaggerGenNewtonsoftSupport();
【讨论】:
以上是关于Swagger UI 不使用 Newtonsoft.Json 序列化十进制,而是使用 System.Text.json的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 OpenApi 自定义 swagger-ui.html url
springdoc-openapi-ui + swagger 不理解 @PathVariable required = false 标志
Spring Boot + Swagger + Swagger UI 和 @RequestBody 具有数据类型 String