JavaScriptSerializer 在序列化时间datetime类型是会有时区差异

JavaScriptSerializer  与    DataContractJsonSerializer(命名空间System.ServiceModel.Web及System.Runtime.Serialization)


JavaScriptSerializer   在序列化时间datetime类型是会有时区差异,JavaScriptSerializer 会将时间转成utc类型

DataContractJsonSerializer  在序列化时间时对时间类型进行了判断,如果为local类型,则加上时区

因此推荐使用DataContractJsonSerializer 序列化

 1     public class JsonHelper
 2     {
 3         public static string Serialize<T>(T data)
 4         {
 5             System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
 6             new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
 7             using (MemoryStream ms = new MemoryStream())
 8             {
 9                 serializer.WriteObject(ms, data);
10                 return Encoding.UTF8.GetString(ms.ToArray());
11             }
12         }
13 
14         public static T Deserialize<T>(string json)
15         {
16             T obj = Activator.CreateInstance<T>();
17             using (MemoryStream ms =
18             new MemoryStream(Encoding.UTF8.GetBytes(json)))
19             {
20                 System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
21                 new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
22                 return (T)serializer.ReadObject(ms);
23             }
24         }
25 
26     }

posted on 2012-09-23 16:33  一个石头  阅读(1109)  评论(0编辑  收藏  举报