zoukankan      html  css  js  c++  java
  • 关于DateTime对象序列化为Json之后的若干问题 拓荒者

    将Datetime对象序列化成Json对象是常有的事情,微软的序列化方法会将Datetime对象序列化成一个字符串:

    "\/Date(1234656000000)\/"

    这样的字符串相当之不友好,但微软貌似喜欢,并且Json.net在4.5之前也是这么做的。现在的Json.net在序列化的时候,会将其转换为ISO标准时间:

    "2009-02-15T00:00:00Z"

    在使用Json.net的时候,我们还可以使用其默认的DateTime转换器来处理,这样转换的字符串为:

    JsonConvert.SerializeObject(entry, new JavaScriptDateTimeConverter());

     输出结果如下:

    new Date(1234656000000)

    对于这三种格式,其优劣不好做出评判,但处理这个兼容问题还是挺头疼的。单从字符串上面看,第三种是最好的,直接可以转换为一个js的Date对象,但笔者尝试这么用的时候发现,jquery在处理这个返回字符串的时候,会发生错误,invalid json,貌似不合法,其中包含了可执行的对象,不是严格的字符串了。

    第二种格式更是恶心,因为在使用IE将其转换的时候,居然发现不支持。果断的抛弃之。

    第一种格式是迫不得已,也是兼容性最好的,如果不适用Json.net,微软的DataContractJsonSerializer或者JavaScriptSerializer都是生成这样的字符串。那么,在HTML中得到这种返回字符串的时候,我们必须进行一次转换,将其转换为Date对象,不知道你们有什么好方法,我一直用的下面的代码:

    Date.FromMSJsonString = function (value) {
        var d = eval('new ' + (value.replace(/\//g, '')));
        return d;
    }

    在转换完成以后,就可以Date对象进行处理了,最后附上如何让Json.net 生成微软的字符串格式:

      JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
      {
        DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
      };
      string microsoftJson = JsonConvert.SerializeObject(entry, microsoftDateFormatSettings);
  • 相关阅读:
    使用 Dockerfile 定制镜像
    UVA 10298 Power Strings 字符串的幂(KMP,最小循环节)
    UVA 11090 Going in Cycle!! 环平均权值(bellman-ford,spfa,二分)
    LeetCode Best Time to Buy and Sell Stock 买卖股票的最佳时机 (DP)
    LeetCode Number of Islands 岛的数量(DFS,BFS)
    LeetCode Triangle 三角形(最短路)
    LeetCode Swap Nodes in Pairs 交换结点对(单链表)
    LeetCode Find Minimum in Rotated Sorted Array 旋转序列找最小值(二分查找)
    HDU 5312 Sequence (规律题)
    LeetCode Letter Combinations of a Phone Number 电话号码组合
  • 原文地址:https://www.cnblogs.com/youring2/p/2576662.html
Copyright © 2011-2022 走看看