.NET配置DTO的DateTime默认格式,解决Swagger序列化适配问题
解决Swagger与DTO DateTime格式不匹配的问题
首先明确:[DisplayFormat] 特性仅用于MVC视图渲染,不会影响JSON序列化逻辑,这就是你配置了格式但Swagger仍使用ISO格式的核心原因。以下针对不同JSON序列化库给出具体解决方案:
一、使用Newtonsoft.Json(ASP.NET Core 3.0前默认,之后需手动引入)
1. 全局统一配置(推荐)
在Program.cs中配置全局序列化规则,所有DateTime类型都会采用指定格式:
builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 如需处理时区,可按需添加: // options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local; });
2. 单个DTO属性单独配置
如果仅需特定属性使用该格式,给Timestamp添加[JsonConverter]特性:
public class TimeStampDTO { [JsonConverter(typeof(IsoDateTimeConverter), "yyyy-MM-dd HH:mm:ss")] public DateTime Timestamp { get; set; } }
注意:需确保项目已安装
Newtonsoft.JsonNuGet包。
二、使用System.Text.Json(ASP.NET Core 3.0+默认)
1. 全局统一配置(推荐)
先自定义DateTime转换器,再在Program.cs中全局注册:
// 自定义DateTime格式转换器 public class DateTimeFormatConverter : JsonConverter<DateTime> { private readonly string _format; public DateTimeFormatConverter(string format) { _format = format; } public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.ParseExact(reader.GetString(), _format, CultureInfo.InvariantCulture); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString(_format, CultureInfo.InvariantCulture)); } } // 在Program.cs中配置 builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new DateTimeFormatConverter("yyyy-MM-dd HH:mm:ss")); });
2. 单个DTO属性单独配置
给目标属性指定自定义转换器:
public class TimeStampDTO { [JsonConverter(typeof(DateTimeFormatConverter), "yyyy-MM-dd HH:mm:ss")] public DateTime Timestamp { get; set; } }
三、同步Swagger示例格式
配置序列化规则后,Swagger默认示例可能仍显示ISO格式,需修改Swagger Schema配置更新示例:
builder.Services.AddSwaggerGen(c => { c.MapType<DateTime>(() => new OpenApiSchema { Type = "string", Example = new OpenApiString(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) }); });
完成以上配置后,Swagger会显示你需要的yyyy-MM-dd HH:mm:ss格式示例,接口也能正确完成DateTime的序列化与反序列化。
内容的提问来源于stack exchange,提问作者Proliges
相关产品推荐
相关产品推荐

