在用 webapi 或者.net core 寫接口時, 我們的時間類型往往是 datetime類型的, 如果直接返回, 前端拿到的結果往往這樣這種格式 :
下面講怎么改成我們想要的格式
webapi
在WebApiConfig.cs文件里的Register方法添加如下代碼, 在接口返回的時候要用 ok(object) 這種格式.
//統一返回時間格式,配置返回的時間類型數據格式 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add( new Newtonsoft.Json.Converters.IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" } );
.net core 2.X
在 Startup.cs 文件里 的 ConfigureServices的 AddMvc 追加下面的代碼
services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; });
.net core 3.x
升級到.net core 3.0 以后,不在默認包含 NewtonsoftJson,而是默認使用System.Text.Json.
我們可以定義一個繼承 System.Text.Json.Serialization.JsonConverter 的類,實現其Read 和 Write兩個抽象方法. 然后再使用
/// <summary> /// 統一時間轉換 /// </summary> public class DatetimeJsonConverter : JsonConverter<DateTime> { /// <summary> /// 讀 /// </summary> /// <param name="reader"></param> /// <param name="typeToConvert"></param> /// <param name="options"></param> /// <returns></returns> public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) { if (DateTime.TryParse(reader.GetString(), out DateTime date)) return date; } return reader.GetDateTime(); } /// <summary> /// 寫 /// </summary> /// <param name="writer"></param> /// <param name="value"></param> /// <param name="options"></param> public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); } }
然后再 ConfigureServices 里添加
services.AddMvc().AddJsonOptions((options)=> { options.JsonSerializerOptions.Converters.Add(new DatetimeJsonConverter()); });