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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM