在用 webapi 或者.net core 写接口时, 我们的时间类型往往是 datetime类型的, 如果直接返回, 前端拿到的结果往往这样这种格式 :
下面讲怎么改成我们想要的格式
webapi
在WebApiConfig.cs文件里的Register方法添加如下代码, 在接口返回的时候要用 ok(object) 这种格式.
//统一返回时间格式,配置返回的时间类型数据格式 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add( newNewtonsoft.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(refUtf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType ==JsonTokenType.String) { if (DateTime.TryParse(reader.GetString(), outDateTime date)) returndate; } returnreader.GetDateTime(); } /// <summary> ///写 /// </summary> /// <param name="writer"></param> /// <param name="value"></param> /// <param name="options"></param> public override voidWrite(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(newDatetimeJsonConverter()); });