.Net Core DateOnly Swagger及Dapper設定
前言 之前在寫前端時,針對日期在處理前後端序列化時,需要因時區特性作一些處理,例如:在台灣主機,取得後端的Json都會+08:00,前端則需要作顯示或調整的處理(Long Story不多述訴。 .Net Core 6 時代,就沒這煩惱了,直接使用DateOnly,前端得到的Json視為字串格式yyyy-MM-dd,送到後端也可以序列化成DateOnly型別。 使用方式 以下針對目前正在開發的一個專案,所使用到的技術,針對DateOnly的設定調整。 Swagger:加入MapType,告知DateOnly對應Json為string builder.Services.AddSwaggerGen(c => {... c.MapType<DateOnly>(() => new OpenApiSchema { Format = "date", Type = "string" }); }); 此設定為測試API時,對應正確的欄位,如下圖修改前/後 2.Dapper: 加入TypeHandler,處理從資料庫取值及設定參數值 public class DapperSqlDateOnlyTypeHandler : SqlMapper.TypeHandler<DateOnly> { public override void SetValue(IDbDataParameter parameter, DateOnly date) { parameter.DbType = DbType.Date; parameter.Value = date.ToDateTime(new TimeOnly(0, 0)); } public override DateOnly Parse(object value) { var result = DateOnly.FromDateTime((DateTime)value); return result; } } //Program.cs Dapper.SqlMapper.AddTypeHandler(new DapperSqlDateOnlyTypeHa