博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于DateTime对象序列化为Json之后的若干问题
阅读量:6968 次
发布时间:2019-06-27

本文共 1099 字,大约阅读时间需要 3 分钟。

将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);

 

 

 

转载地址:http://tkssl.baihongyu.com/

你可能感兴趣的文章
统计出现频率最高的十个单词的程序性能分析
查看>>
在ubuntu linux下以编译方式安装LAMP(apache mysql php)环境
查看>>
CentOS 7 中配置通过 daemon 模式启动的 Tomcat 8 服务
查看>>
Linux下限制本机网卡带宽的方法
查看>>
Linux下MySQL数据库常用基本操作
查看>>
greenplum presto impala选型与测评
查看>>
Ubuntu 17.10 +Nginx +Mysql +PHP 环境搭建
查看>>
PAT 1076__部分正确
查看>>
Dom4j下载及使用Dom4j读写XML简介
查看>>
Windows 2003 系统盘扩容,增加C盘空间
查看>>
如何让自己的Asp.Net程序运行在免费的云计算空间OpenShift上面
查看>>
OC基础第一天
查看>>
Git clone远程分支
查看>>
PHP5.3.20配置后发生未知 FastCGI 错误 错误代码 0x800736b1解决办法
查看>>
SELECT可输入可选的实现方法
查看>>
隐藏列tableoid
查看>>
Spring Boot with MySQL
查看>>
解决办法Android中Error generating final archive: Deb...
查看>>
自动构建工具:Gradle与Maven
查看>>
android studio 2.0 错误记录
查看>>