public static class JsonHelper { /// <summary> /// JSON序列化 /// </summary> public static string JsonSerializer<T>(T t) { //so 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字串 const string p = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = ConvertJsonDateToDateString; Regex reg = new Regex(p); jsonString = reg.Replace(jsonString, matchEvaluator); return jsonString; } /// <summary> /// 從一個對象資訊產生Json串 /// </summary> /// <param name="obj">轉換對象</param> /// <typeparam name="T">物件類型</typeparam> /// <returns></returns> public static string ToJson<T>(this T obj) { var fullName = typeof (T).FullName; if (fullName != null && fullName.Contains("<>f__AnonymousType")) { //匿名型別 var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); return serializer.Serialize(obj); } else { var serializer = new DataContractJsonSerializer(typeof(T)); string json; using (MemoryStream stream = new MemoryStream()) { serializer.WriteObject(stream, obj); json = Encoding.UTF8.GetString(stream.ToArray()); stream.Close(); } return json; } } /// <summary> /// JSON還原序列化 /// </summary> public static T JsonDeserialize<T>(string jsonString) { //將"yyyy-MM-dd HH:mm:ss"格式的字串轉為"\/Date(1294499956278+0800)\/"格式 const string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator 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) { DateTime dt = new DateTime(1970, 1, 1); dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value)); dt = dt.ToLocalTime(); string result = dt.ToString("yyyy-MM-dd HH:mm:ss"); return result; } /// <summary> /// 將時間字串轉為Json時間 /// </summary> private static string ConvertDateStringToJsonDate(Match m) { DateTime dt = DateTime.Parse(m.Groups[0].Value); dt = dt.ToUniversalTime(); TimeSpan ts = dt - DateTime.Parse("1970-01-01"); string result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds); return result; } }
原文地址http://blog.csdn.net/allsharps/article/details/7357446