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

  • 相关阅读:
    Swift实现单例
    UIViewContentMode说明
    打开或关闭Mac的隐藏文件的命令。
    struts2-2.3.20以上版本无法正常启动
    eclipse下导入jdk源码
    js 与css script
    eclipse导入jquery包后报错
    ${pageContext.request.contextPath} :JSP取得绝对路径方法
    小米暑期实习在线笔试2015-04-25
    android动态污点分析
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/16095678.html
Copyright © 2020-2023  润新知