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);
  • 相关阅读:
    网站安全策略
    防止表单重复提交的几种策略
    Laravel5中防止XSS跨站攻击的方法
    PHP + ORACLE 远程连接数据库环境配置
    iview table表格内容为数组或者对象的子元素时问题讨论
    jquery中 $(xxx).each() 和 $.each()的区别,以及enter键一键登录
    vue.js 强行赋值、刷新数组或者对象 方法之 $.set()
    vue 组件,以及组件的复用
    vue 和 jquery混合使用
    JS清除空格之trim()方法
  • 原文地址:https://www.cnblogs.com/youring2/p/2576662.html
Copyright © 2011-2022 走看看