介绍
小编给大家分享一下Json日期格式问题的解决方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
开发中有时候需要从服务器端返回Json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下所示:
,//设置服务器响应的结果为纯文本格式=,context.Response.ContentType “文本/plain"; ,//学生对象集合 ,Liststudents =, new List ,{ ,new 学生(){Name =癟om", ,Birthday =Convert.ToDateTime (“2014 - 01 - 31, 12:12:12")}, ,new 学生(){Name =癛ose", ,Birthday =Convert.ToDateTime (“2014 - 01 - 10, 11:12:12")}, ,new 学生(){Name =癕ark", ,Birthday =Convert.ToDateTime(“2014 - 01 - 09年,10:12:12")} ,}; ,//javascript序列化器 js, JavascriptSerializer =new JavascriptSerializer (); ,//序列化学生集合对象得到json字符 ,string studentsJson=jss.Serialize(学生); ,//将字符串响应到客户端 ,context.Response.Write (studentsJson); ,context.Response.End ();
运行结果是:
其中汤姆所对应生日“2014-01-31”变成了1391141532000,这其实是1970年1月1日至今的毫秒数;1391141532000/1000/60/60/24/365=44.11年,44 + 1970=2014年,按这种方法可以得出年月日时分秒和毫秒。这种格式是一种可行的表示形式但不是普通人可以看懂的友好格式,怎么让这个格式变化?
<强>解决办法:强>
<强>方法1:在服务器端将日期格式使用选择方法或LINQ表达式转换后发到客户端:强>
using 系统; using System.Collections.Generic; using 包含; using System.Web.script.Serialization; namespace JsonDate1 { ,using 来; ,///& lt; summary> ,///学生类,测试用 ,///& lt;/summary> ,public class 学生 ,{ ,///& lt; summary> ,///姓名 ,///& lt;/summary> ,public String Name {组,得到,,,} ,///& lt; summary> ,///生日 ,///& lt;/summary> ,public DateTime Birthday {组,得到,,,} ,} ,///& lt; summary> ,///返回学生集合的json字符 ,///& lt;/summary> ,public class GetJson : IHttpHandler ,{ ,public void  ProcessRequest (HttpContext 上下文) ,{ ,//设置服务器响应的结果为纯文本格式=,context.Response.ContentType “文本/plain"; ,//学生对象集合 ,Liststudents =, new List ,{ ,new 学生(){Name =癟om" Birthday =Convert.ToDateTime (“2014 - 01 - 31, 12:12:12")}, ,new 学生(){Name =癛ose" Birthday =Convert.ToDateTime (“2014 - 01 - 10, 11:12:12")}, ,new 学生(){Name =癕ark" Birthday =Convert.ToDateTime(“2014 - 01 - 09年,10:12:12")} ,}; ,//使用选择方法重新投影对象集合将生日属性转换成一个新的属性 ,//注意属性变化后要重新命名,并立即执行 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 ,{ ,得到 ,{ ,return 假; ,} ,} ,} }
选择方法重新投影对象集合将生日属性转换成一个新的属性,注意属性变化后要重新命名,属性名可以相同,这里可以使用选择方法也可以使用LINQ查询表达式,也可以选择别的方式达到相同的目的,这种办法可以将集合中客户端不用的属性剔除,达到简单优化性能的目的。
运行结果: