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了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章