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; } }