JavaScriptSerializer 序列化json 时间格式
本文转自:http://www.cnblogs.com/zgqys1980/p/4587587.html
利用JavaScriptSerializer 序列化json 时间格式,得到的DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,显然要进行转换\/Date(1404098342309)\/,经过分析,其实这个1404098342309数值,是1970年1月1日(DateTime的最小值)到date实际表示的日期之差的总毫秒数。
1.利用字符串直接替换
1 Model m = new Model { Id = 1, Dt = DateTime.Now }; 2 JavaScriptSerializer js = new JavaScriptSerializer(); 3 string str = js.Serialize(m); 4 str = Regex.Replace(str, @"\\/Date\((\d+)\)\\/", match => 5 { 6 DateTime dt = new DateTime(1970, 1, 1); 7 dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value)); 8 dt = dt.ToLocalTime(); 9 return dt.ToString("yyyy-MM-dd HH:mm:ss"); 10 }); 11 Response.Write(str); 12 //{"Id":1,"Dt":"2011-08-17 17:38:47"}
2.JsonHelper
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Runtime.Serialization.Json; 6 using System.IO; 7 using System.Text; 8 using System.Text.RegularExpressions; 9 /// <summary> 10 /// JSON序列化和反序列化辅助类 11 /// </summary> 12 public class JsonHelper 13 { 14 /// <summary> 15 /// JSON序列化 16 /// </summary> 17 public static string JsonSerializer<T>(T t) 18 { 19 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 20 MemoryStream ms = new MemoryStream(); 21 ser.WriteObject(ms, t); 22 string jsonString = Encoding.UTF8.GetString(ms.ToArray()); 23 ms.Close(); 24 //替换Json的Date字符串 25 string p = @"///Date/((/d+)/+/d+/)///"; /*////Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)////*/ 26 MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); 27 Regex reg = new Regex(p); 28 jsonString = reg.Replace(jsonString, matchEvaluator); 29 return jsonString; 30 } 31 /// <summary> 32 /// JSON反序列化 33 /// </summary> 34 public static T JsonDeserialize<T>(string jsonString) 35 { 36 //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式 37 string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}"; 38 MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); 39 Regex reg = new Regex(p); 40 jsonString = reg.Replace(jsonString, matchEvaluator); 41 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 42 MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); 43 T obj = (T)ser.ReadObject(ms); 44 return obj; 45 } 46 47 /// <summary> 48 /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串 49 /// </summary> 50 private static string ConvertJsonDateToDateString(Match m) 51 { 52 string result = string.Empty; 53 DateTime dt = new DateTime(1970,1,1); 54 dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value)); 55 dt = dt.ToLocalTime(); 56 result = dt.ToString("yyyy-MM-dd HH:mm:ss"); 57 return result; 58 } 59 /// <summary> 60 /// 将时间字符串转为Json时间 61 /// </summary> 62 private static string ConvertDateStringToJsonDate(Match m) 63 { 64 string result = string.Empty; 65 DateTime dt = DateTime.Parse(m.Groups[0].Value); 66 dt = dt.ToUniversalTime(); 67 TimeSpan ts = dt - DateTime.Parse("1970-01-01"); 68 result = string.Format("///Date({0}+0800)///",ts.TotalMilliseconds); 69 return result; 70 } 71 }

浙公网安备 33010602011771号