栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.Net6去掉返回时间中的T

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.Net6去掉返回时间中的T

由于一系列了规则,.Net中返回的时间序列化后都带有T,最近项目升级到.NET6了,返回数据中仍然有T!记录一下升级解决方案!

  • 注意在.Net6之前序列化一般使用Newtonsoft.Json 升级后采用 System.Text.Json 。
  • 原以为按照.Net5中的方案,在Program中配置一下就可以了,试了一下发现姿势不对,首先.Net6现在默认不需要AddMvc()配置了,我们就不能使用
builder.Services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest).AddJsonOptions(option =>

这种方法,而且SetCompatibilityVersion方法也以及被弃用了!

  • 并且options也升级为JsonSerializerOptions,而且是只读的,干了尬!

  • 尝试了一下,有点难搞,去官网找了一下,果然有升级说明传送门,明确告知了DateTimeFormatString不被支持,但是告诉了如何升级啊!

  • 继续传送门

  • 看到了底,也没有看出个所以然,最底部有个推荐阅读
    如何在 .NET 中编写用于 JSON 序列化(封送)的自定义转换器
    这不就是我需要的东西吗?只不过官方举例是用的DateTimeOffsetJsonConverter ,修改为DateTimeJsonConverter就可以了啊!
    干他一扳手!

  • 新建一个DateTimeJsonConverter类

    public class DateTimeJsonConverter : JsonConverter
    {
        public override DateTime Read(
            ref Utf8JsonReader reader,
            Type typeToConvert,
            JsonSerializerOptions options)
        {
            return DateTime.ParseExact(reader.GetString(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
        }
        public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
        {
            writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
        }
    }
  • 新建一个JsonSerializerOptions对象,添加我们新建的转换器
        JsonSerializerOptions serializeOptions = new JsonSerializerOptions
        {
            WriteIndented = true,
            Converters ={ new DateTimeJsonConverter() }
        };

  • 在返回JsonResult对象时进行调用(我们有多个返回对象,为了方便,我们可以重新一下ControllerBase,这样只需要在重写的BaseController中进行调用就好了)
 return new JsonResult(baseResponseEntity, serializeOptions);
  • PS 重写控制器示例(控制器中继续BaseController ,调用BaseJsonResult)
 public class BaseController : ControllerBase
    {
        JsonSerializerOptions serializeOptions = new JsonSerializerOptions
        {
            WriteIndented = true,
            Converters ={ new DateTimeJsonConverter() }
        };


        /// 
        /// 返回自定义对象 消息为默认
        /// 
        /// 
        /// 
        /// 
        /// 
        protected JsonResult BaseJsonResult(object result, StateCodeEnum sce)
        {
            BaseResponseEntity baseResponseEntity = new BaseResponseEntity((int)sce, result, EnumHelper.GetEnumName((int)sce));
            return new JsonResult(baseResponseEntity, serializeOptions);
        }
        /// 
        /// 返回自定义对象
        /// 
        /// 
        /// 
        /// 
        /// 
        protected JsonResult BaseJsonResult(object result, StateCodeEnum sce, string msg)
        {
            BaseResponseEntity baseResponseEntity = new BaseResponseEntity((int)sce, result, msg);
            return new JsonResult(baseResponseEntity, serializeOptions);
        }


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号