我们知道,序列化主要就是为了传输方便,将要传输的对象序列化为二进制的数据流,效率极高,接收时通过反序列化转化成对象,从而达到一个传输的效果,那么json反序列化时间格式是什么?接下来,我们就来给大家讲解一下这方面的内容。
反序列化能够自动识别如下日期格式:
ISO-8601日期格式
yyyy-MM-dd
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd HH:mm:ss.SSS
毫秒数字
毫秒数字字符串
.NET JSON日期格式
new Date(1982932381111)
/* 测试反序列化的时候日期识别 */ String aoString = "{\"date\":1452074237760,\"id\":1}"; ao = JSON.parseObject(aoString, Ao.class); System.out.println(ao.toString()); /* * 注意 yyyy-MM-dd HH:mm:ss.SSS,中间如果为0也必填 * 例如:2016-1-6是错误的格式,正确的格式为2016-01-06 */ String aoString1 = "{\"date\":\"2016-01-06 17:57:17.000\",\"id\":1}"; ao = JSON.parseObject(aoString1, Ao.class); System.out.println(ao.toString());
时间格式处理:
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter(); timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; Response.Write(JsonConvert.SerializeObject(bll.GetModelList(strWhere), Newtonsoft.Json.Formatting.Indented, timeFormat));
以下是Json日期格式案例分享:
开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下所示:
//设置服务器响应的结果为纯文本格式 context.Response.ContentType = "text/plain"; //学生对象集合 Liststudents = new List { new Student() { Name = "Tom" , Birthday = Convert.ToDateTime("2014-01-31 12:12:12") } , new Student() { Name = "Rose" , Birthday = Convert.ToDateTime("2014-01-10 11:12:12") } , new Student() { Name = "Mark" , Birthday = Convert.ToDateTime("2014-01-09 10:12:12") } }; //javascript序列化器 JavaScriptSerializer jss = new JavaScriptSerializer(); //序列化学生集合对象得到json字符 string studentsJson = jss.Serialize(students); //将字符串响应到客户端 context.Response.Write(studentsJson); context.Response.End();
运行结果是:
其中Tom所对应生日“2014-01-31”变成了1391141532000,这其实是1970 年 1 月 1 日至今的毫秒数;1391141532000/1000/60/60/24/365=44.11年,44+1970=2014年,按这种方法可以得出年月日时分秒和毫秒。这种格式是一种可行的表示形式但不是普通人可以看懂的友好格式,怎么让这个格式变化?
解决办法:
方法1:在服务器端将日期格式使用Select方法或LINQ表达式转换后发到客户端:
using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serialization; namespace JsonDate1 { using System.Linq; /// /// 学生类,测试用 /// public class Student { /// /// 姓名 /// public String Name { get; set; } /// /// 生日 /// public DateTime Birthday { get; set; } } /// /// 返回学生集合的json字符 /// public class GetJson: IHttpHandler { public void ProcessRequest(HttpContext context) { //设置服务器响应的结果为纯文本格式 context.Response.ContentType = "text/plain"; //学生对象集合 Liststudents = new List { new Student() { Name = "Tom", Birthday = Convert.ToDateTime("2014-01-31 12:12:12") } , new Student() { Name = "Rose", Birthday = Convert.ToDateTime("2014-01-10 11:12:12") } , new Student() { Name = "Mark", Birthday = Convert.ToDateTime("2014-01-09 10:12:12") } }; //使用Select方法重新投影对象集合将Birthday属性转换成一个新的属性 //注意属性变化后要重新命名,并立即执行 var studentSet = students.Select( p => new { p.Name, Birthday = p.Birthday.ToString("yyyy-mm-dd") } ) .ToList(); //javascript序列化器 JavaScriptSerializer jss = new JavaScriptSerializer(); //序列化学生集合对象得到json字符 string studentsJson = jss.Serialize(studentSet); //将字符串响应到客户端 context.Response.Write(studentsJson); context.Response.End(); } public bool IsReusable { get { return false; } } } }
Select方法重新投影对象集合将Birthday属性转换成一个新的属性,注意属性变化后要重新命名,属性名可以相同;这里可以使用select方法也可以使用LINQ查询表达式,也可以选择别的方式达到相同的目的;这种办法可以将集合中客户端不用的属性剔除,达到简单优化性能的目的。
运行结果:
这时候的日期格式就已经变成友好格式了,不过在javascript中这只是一个字符串。
通过一些相关案例分享大家应该知道Json日期格式怎么处理了吧,其实要解决这些问题还有其他一些办法,我们要学会多发多方面思考解决问题,这样会更好!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: