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  }

 

posted @ 2015-10-09 21:58  竹蜻蜓  阅读(175)  评论(0)    收藏  举报