zoukankan      html  css  js  c++  java
  • Json.Net学习笔记(六) Json.Net中关于时间的序列化

    DateTime类型在Json中表示是很难的。

    问题来源于JSON spec (Json规范)自身,没有精确的语法。这个规范包括objects, arrays, strings, integers 和 floats,但是对于date是什么样子的没有定义准确的标准。

    关于时间,Json.Net使用的默认格式与微软:"\/Date(1198908717056)\/"相同,您可以从此外获得更多信息.

    DateTime JsonConverters

    由于在Json中没有关于时间的准确标准,当与其他系统进行互操作时就会有大量不同的时间格式。幸运的是,Json.Net为了处理读写自定义时间提供了一个解决方案:JsonConverters. JsonConverter是用来重写一个类型如何被序列化的。

    示例: 

    public class LogEntry
        {
            public string Details { get; set; }
            public DateTime LogDate { get; set; }
        }

    测试1:

           LogEntry logEntry = new LogEntry()
                {
                    LogDate = new DateTime(2010, 12, 19, 0, 0, 0, DateTimeKind.Utc),
                    Details = "Application started."
                };
                string defaultJson = JsonConvert.SerializeObject(logEntry, Formatting.Indented);
                Console.WriteLine(defaultJson);

    输出结果:

    {
      "Details": "Application started.",
      "LogDate": "\/Date(1292716800000)\/"
    }

    测试2:

        string javascriptJson = JsonConvert.SerializeObject(logEntry, Formatting.Indented, new JavaScriptDateTimeConverter());
         Console.WriteLine(javascriptJson);
    输出结果:

    {
      "Details": "Application started.",
      "LogDate": new Date(
        1292716800000
      )
    }

    测试3:

                string isoJson = JsonConvert.SerializeObject(logEntry, Formatting.Indented, new IsoDateTimeConverter());
                Console.WriteLine(isoJson);

    输出结果:

    {
      "Details": "Application started.",
      "LogDate": "2010-12-19T00:00:00Z"
    }

     简单地,通过JsonConverter您可以使用Json.Net的序列化器

    >JavaScriptDateTimeConverter

      JavaScriptDateTimeConverter类是来自于Json.Net的两个DataTime Json转换器之一,这个转换器序列化一个DateTime类型为一个JavaScipt日期对象(https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Date)

      new Date(1292716800000)

    从技术上讲,根据规范这是无效的数据格式,但是所有的浏览器、和一些Json的框架包括Json.Net都支持它。

    >IsoDateTimeConverter

      IsoDateTimeConverter序列一个DateTime类型为一个ISO 8601格式的字符串.

      "2010-12-19T00:00:00Z"

    IsoDateTimeConverter 类有一个属性DateTimeFormat,用来更进一步的自定义字符串格式.

    最后要注意的一件事是,所有被Json.Net返回的日期值都是UTC Time

  • 相关阅读:
    弄懂Java为何只有值传递
    反转链表进阶
    剑指Offer-16:合并两个有序链表
    剑指Offer-15:反转链表
    剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。
    剑指Offer-13:调整数组位置使奇数位于偶数前面
    Java实现二分查找
    LDAP
    关于Prometheus运维实践项目
    LDAP-openldap服务部署和测试(YUM安装)
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2251119.html
Copyright © 2011-2022 走看看