关于DateTime对象序列化为Json之后的若干问题
2012-07-04 18:36
302 查看
将Datetime对象序列化成Json对象是常有的事情,微软的序列化方法会将Datetime对象序列化成一个字符串:
这样的字符串相当之不友好,但微软貌似喜欢,并且Json.net在4.5之前也是这么做的。现在的Json.net在序列化的时候,会将其转换为ISO标准时间:
在使用Json.net的时候,我们还可以使用其默认的DateTime转换器来处理,这样转换的字符串为:
输出结果如下:
对于这三种格式,其优劣不好做出评判,但处理这个兼容问题还是挺头疼的。单从字符串上面看,第三种是最好的,直接可以转换为一个js的Date对象,但笔者尝试这么用的时候发现,jquery在处理这个返回字符串的时候,会发生错误,invalid json,貌似不合法,其中包含了可执行的对象,不是严格的字符串了。
第二种格式更是恶心,因为在使用IE将其转换的时候,居然发现不支持。果断的抛弃之。
第一种格式是迫不得已,也是兼容性最好的,如果不适用Json.net,微软的DataContractJsonSerializer或者JavaScriptSerializer都是生成这样的字符串。那么,在HTML中得到这种返回字符串的时候,我们必须进行一次转换,将其转换为Date对象,不知道你们有什么好方法,我一直用的下面的代码:
在转换完成以后,就可以Date对象进行处理了,最后附上如何让Json.net 生成微软的字符串格式:
"\/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);
相关文章推荐
- AJAX JSON中日期类型DateTime格式化的序列化自定义对象以及自定义类型参数的问题处理
- 关于json反序列化字符串为java对象时科学计数法和精度问题
- 错误 ——序列化对象属性命名与 json 转换问题
- ASP.NET Ajax, JQuery & JSON Date Serialization,.net对象系列化为JSON的时候,DateTime类型的转换问题
- 关于数据序列化(5),定制FastJSON序列化(解决Java大Long类型js的Number接收丢失数据的问题,不序列化某些属性)
- 解决图片对象不能json序列化问题:<ImageFieldFile: image/background_IXSZChD.jpg> is not JSON serializable
- 解决Python自带的json不能序列化data,datetime类型数据问题
- 关于ActiveMQ序列化对象爆“Forbidden class xxx! ...”问题的解决
- Java中关于Json对象类型和字符串类型之间互相转化的问题 .
- net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to xxx 关于JSON对象解析List<XXX>在调用时出错问题
- Hibernate POJO在序列化(JSON)时遇到的若干问题
- 将对象序列化为json格式时遇见的问题
- JavaScriptSerializer 对 DateTime 数据类型的JSON序列化的问题
- 关于EasyUI Datagrid JSON对象内嵌对象的取值问题
- python使用json序列化datetime类型问题处理
- easyui 关于Datagrid JSON对象内嵌对象的取值问题
- JavaScriptSerializer 对 DateTime 数据类型的JSON序列化的问题
- 多维数组json_encode之后产生对象而不是数组问题
- Spring MVC中 Json序列化对象实例的问题和两个办法
- webapi datetime类型序列化成json带T且时间不对问题的解决