• 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

  • 相关阅读:
    Docker 0x05: Dockerfile制作镜像
    Docker 0x04: Docker 基本使用
    Docker 0x03:Install Docker
    Docker 0x02: Docker生态
    Docker 0x01:Docker Container容器技术
    Axios发送AJAX请求
    Django学习之十三:提高页面开发效率减少冗余的模板系统
    javascript获取指定区间范围随机数
    完美解决eclipse编辑器中文字符过小问题
    mysql查询表所有列名,并用逗号分隔
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2251119.html
Copyright © 2020-2023  润新知