JavaScriptSerializer 序列号datatime时少了8小时

有人说主要的因素是在于JSON格式不直接支持日期和时间。

 

简单一点处理办法是ToLocalTime()一下:dt = dt.ToLocalTime();

参考http://blog.csdn.net/cncdns/article/details/6164389 写个jsonhelp。不直接调用JavaScriptSerializer 的序列号就能解决这个问题。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;   

using System.Runtime.Serialization.Json;   

using System.IO;   

using System.Text;   

using System.Text.RegularExpressions;   

/// <summary>  

/// JSON序列化和反序列化辅助类  

/// </summary>  

public class JsonHelper  

{  

     /// <summary>  

    /// JSON序列化  

    /// </summary>  

     public static string JsonSerializer<T>(T t)  

     {  

         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  

         MemoryStream ms = new MemoryStream();  

        ser.WriteObject(ms, t);  

         string jsonString = Encoding.UTF8.GetString(ms.ToArray());  

         ms.Close();  

         //替换Json的Date字符串  

         string p = @"///Date/((/d+)/+/d+/)///"; /*////Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)////*/

         MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);  

          Regex reg = new Regex(p);  

         jsonString = reg.Replace(jsonString, matchEvaluator);  

         return jsonString;  

     }  

     /// <summary>  

     /// JSON反序列化  

     /// </summary>  

     public static T JsonDeserialize<T>(string jsonString)  

     {  

         //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式  

         string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";  

        MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);  

        Regex reg = new Regex(p);  

         jsonString = reg.Replace(jsonString, matchEvaluator);  

         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  

        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));  

         T obj = (T)ser.ReadObject(ms);  

         return obj;  

     }  

    

     /// <summary>  

     /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串  

     /// </summary>  

     private static string ConvertJsonDateToDateString(Match m)  

     {  

         string result = string.Empty;  

         DateTime dt = new DateTime(1970,1,1);  

         dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));  

         dt = dt.ToLocalTime();  

         result = dt.ToString("yyyy-MM-dd HH:mm:ss");  

        return result;  

     }  

     /// <summary>  

     /// 将时间字符串转为Json时间  

     /// </summary>  

     private static string ConvertDateStringToJsonDate(Match m)  

     {  

         string result = string.Empty;  

         DateTime dt = DateTime.Parse(m.Groups[0].Value);  

         dt = dt.ToUniversalTime();  

         TimeSpan ts = dt - DateTime.Parse("1970-01-01");  

         result = string.Format("///Date({0}+0800)///",ts.TotalMilliseconds);  

        return result;  

    }  

 }

 

你可能感兴趣的:(JavaScript)