.net core3.0 API设置默认返回时间格式

发布时间:2020-04-08 10:49:04来源:本站阅读(831)

    .netcore3.0 的json格式化不再默认使用Newtonsoft.Json,而是使用自带的System.Text.Json来处理。 理由是System.Text.Json 依赖更少,效率更高。

    在使用中,我需要返回的时间不是那种带T的,而是yyyy-MM-dd HH:mm:ss这种格式的,怎么做呢?自定义JSON处理。

    新建类

    public class JsonHelper
        {
            
            public class DateTimeConverter:JsonConverter<DateTime>
            {
                public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
                {
                    return DateTime.Parse(reader.GetString());
                }
    
                public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
                {
                    writer.WriteStringValue(DateHelper.Date2String(value));
                }
            }
    
            public class DateTimeNullableConverter:JsonConverter<DateTime?>
            {
                public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
                {
                    return string.IsNullOrEmpty(reader.GetString()) ? default(DateTime?) : DateTime.Parse(reader.GetString());
                }
    
                public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
                {
                    writer.WriteStringValue(DateHelper.Date2String(value));
                }
            }
        }

    JsonConverter中包含 read和write的抽象方法 ,只要重写这两个方法,规定输入转换的方式和输出格式化的方法就行了。

    在 setup中增加配置

    services.AddControllers().AddJsonOptions(o =>
                {
                    o.JsonSerializerOptions.Converters.Add(new JsonHelper.DateTimeConverter());
                    o.JsonSerializerOptions.Converters.Add(new JsonHelper.DateTimeNullableConverter());
                });

    这个时候再请求接口,就能正常转换日期类型了, 同样返回日期格式不是在 日期和时间中间有个 “T” 了,而是 yyyy-MM-dd HH:mm:ss正常的格式了。


关键字json