C#:解决JSON序列化时时间格式带“T”的问题

今天在开发工程中,遇到了一个问题:实体类里面有属性类型是DateTime,序列化以后会带有大写的“T”,为什么时间格式中间会带有一个大写的T呢?

通过查询,发现这是标准格式规定的:国际标准化组织的国际标准ISO 8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》

原文如下:

日期和时间的组合表示法编辑
合并表示时,要在时间前面加一大写字母T,如要表示北京时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00或20040503T173008+08。

所以这个T date和time合并表示时,中间加个T。

iso 8806的百度地址是:

https://baike.baidu.com/item/ISO%208601/3910715?fr=aladdin

但是这种结果非常不直观,我们需要修改一下序列化时的格式。

新建Order类:

using System;

namespace DateFormatTest
{
    public class Order
    {
        public int ID { get; set; }

        public DateTime OrderTime { get; set; }
    }
}

在main方法里面调用:

using Newtonsoft.Json;
using System;

namespace DateFormatTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 实例化对象
            Order order = new Order();
            order.ID = 1;
            order.OrderTime = DateTime.Now;
            // 序列化
            string str=JsonConvert.SerializeObject(order);
            Console.WriteLine(str);
            Console.ReadKey();
        }
    }
}

运行结果

我们修改序列化的方法,添加一个帮助类:

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace DateFormatTest
{
    public static class JsonUtility
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data">要序列化的数据</param>
        /// <param name="dateTimeFormat">时间格式 默认yyyy-MM-dd HH:mm:ss</param>
        /// <returns></returns>
        public static string SerializeToJson(object data,string dateTimeFormat = "yyyy-MM-dd HH:mm:ss")
        {
            IsoDateTimeConverter timeConverter = new IsoDateTimeConverter() 
            { 
                DateTimeFormat = dateTimeFormat 
            };
            return JsonConvert.SerializeObject(data, Formatting.Indented, timeConverter);
        }
    }
}

这里面序列化的时候,我们指定了时间格式。

修改Main方法

using System;

namespace DateFormatTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 实例化对象
            Order order = new Order();
            order.ID = 1;
            order.OrderTime = DateTime.Now;
            // 序列化,这里使用默认格式进行序列化
            string str= JsonUtility.SerializeToJson(order);
            Console.WriteLine(str);
            Console.ReadKey();
        }
    }
}

运行结果

这时时间格式就不会带有T了。

posted @ 2022-04-03 13:15  .NET开发菜鸟  阅读(6962)  评论(0编辑  收藏  举报