/*------------------------------------------------------------------ -- COPYRIGHT (C) 2011-2020 hanhe -- ALL RIGHTS RESERVED. -- han he -- CREATE DATE: 2014/06/27 -- CREATE MAN: 姜新军 -- 对象与JSON字符串互相转化类 -- MODIFY HISTORY: -- MODIFY DATE: -- MODIFY MAN: -- MODIFY DESC: -- MODIFY DATE: -- MODIFY MAN: -- MODIFY DESC: ---------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Text; using System.Runtime.Serialization.Json; using System.Reflection; using System.Data; using System.Text.RegularExpressions;///记得引用这个命名空间 using System.Web.Script.Serialization; using System.Runtime.Serialization.Json; namespace HH.AutoBom.Utils.Common { /// /// json类库 /// public class JsonHelper { /// /// 实例化 /// public JsonHelper() { } #region 把DataTable数据,转化成JSON字符串 /// /// 把DataTable数据,转化成JSON字符串 /// /// 对象名称 /// DataTable数据集 /// JSON数组字符串 public static string DataTableToJson(string jsonName, DataTable dt) { StringBuilder Json = new StringBuilder(); Json.Append("{\"" + jsonName + "\":["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { Json.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\""); if (j < dt.Columns.Count - 1) { Json.Append(","); } } Json.Append("}"); if (i < dt.Rows.Count - 1) { Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); } #endregion #region 把LIST数据对象,转化成JSON数组字符串 /// /// 把LIST数据对象,转化成JSON数组字符串 /// /// 对象集合 /// JSON名称 /// JSON数组字符串 public static string IListToJson(string jsonName, IList IL, long totalRows) { StringBuilder Json = new StringBuilder(); if (!string.IsNullOrEmpty(jsonName)) { Json.Append("{\"" + jsonName + "\":["); } else { Json.Append("["); } if (IL.Count > 0) { for (int i = 0; i < IL.Count; i++) { T obj = Activator.CreateInstance(); Type type = obj.GetType(); PropertyInfo[] pis = type.GetProperties(); Json.Append("{"); for (int j = 0; j < pis.Length; j++) { object value = pis[j].GetValue(IL[i], null); //处理日期类型 if (Util.IsTDateTime(value)) { //格式化日期 value = Util.ToString(Convert.ToDateTime(value), "yyyy-MM-dd HH:mm:ss"); //格式化成JSON日期。 string pattern = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); Regex reg = new Regex(pattern); value = reg.Replace(value.ToString(), matchEvaluator); // value = ConvertDateStringToJsonDate(value.ToString()); } Json.Append("\"" + pis[j].Name.ToString() + "\":\"" + value + "\""); if (j < pis.Length - 1) { Json.Append(","); } } Json.Append("}"); if (i < IL.Count - 1) { Json.Append(","); } } } if (!string.IsNullOrEmpty(jsonName)) { if (totalRows > 0) { Json.Append("],\"totalRows\":\"" + totalRows + "\"}"); } else { Json.Append("]}"); } } else { Json.Append("]"); } return Json.ToString(); } #endregion #region 把LIST数据对象,转化成JSON数组字符串 主要用于datagrid可识别用 /// /// 把LIST数据对象,转化成JSON数组字符串 与IListToJson不同在于方法中返回总数用total,直接datagrid可识别 /// /// 对象集合 /// JSON名称 /// JSON数组字符串 /// [HanHe(谢大磊)] CREATED 2017/9/6 public static string IListToJsonNew(string jsonName, IList IL, long totalRows) { StringBuilder Json = new StringBuilder(); if (!string.IsNullOrEmpty(jsonName)) { Json.Append("{\"" + jsonName + "\":["); } else { Json.Append("["); } if (IL.Count > 0) { for (int i = 0; i < IL.Count; i++) { T obj = Activator.CreateInstance(); Type type = obj.GetType(); PropertyInfo[] pis = type.GetProperties(); Json.Append("{"); for (int j = 0; j < pis.Length; j++) { object value = pis[j].GetValue(IL[i], null); //处理日期类型 if (Util.IsTDateTime(value)) { //格式化日期 value = Util.ToString(Convert.ToDateTime(value), "yyyy-MM-dd HH:mm:ss"); //格式化成JSON日期。 string pattern = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); Regex reg = new Regex(pattern); value = reg.Replace(value.ToString(), matchEvaluator); // value = ConvertDateStringToJsonDate(value.ToString()); } Json.Append("\"" + pis[j].Name.ToString() + "\":\"" + value + "\""); if (j < pis.Length - 1) { Json.Append(","); } } Json.Append("}"); if (i < IL.Count - 1) { Json.Append(","); } } } if (!string.IsNullOrEmpty(jsonName)) { if (totalRows > 0) { Json.Append("],\"total\":\"" + totalRows + "\"}"); } else { Json.Append("]}"); } } else { Json.Append("]"); } return Json.ToString(); } #endregion #region 把对象序列化 JSON 字符串 /// /// 把对象序列化 JSON 字符串 /// /// 对象类型 /// 对象实体 /// JSON字符串 public static string GetJson(T obj) { //记住 添加引用 System.ServiceModel.Web /** * 如果不添加上面的引用,System.Runtime.Serialization.Json; Json是出不来的哦 * */ DataContractJsonSerializer json = new DataContractJsonSerializer(typeof (T)); using (MemoryStream ms = new MemoryStream()) { json.WriteObject(ms, obj); string szJson = Encoding.UTF8.GetString(ms.ToArray()); return szJson; } } #endregion #region 把JSON字符串还原为对象 /// /// 把JSON字符串还原为对象 /// /// 对象类型 /// JSON字符串 /// 对象实体 public static T ParseFormJson(string szJson) { T obj = Activator.CreateInstance(); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson))) { DataContractJsonSerializer dcj = new DataContractJsonSerializer(typeof (T)); return (T) dcj.ReadObject(ms); } } #endregion #region 将JSON字符串转换成对象集合 /// /// 将JSON字符串转换成对象集合 /// /// /// /// public static List JSONStringToList(string JsonStr) { string pattern = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); Regex reg = new Regex(pattern); JsonStr = reg.Replace(JsonStr, matchEvaluator); JavaScriptSerializer Serializer = new JavaScriptSerializer(); List objs = Serializer.Deserialize>(JsonStr); return objs; } #endregion #region 将Model对象转换成JsonString public static string ModelToJsonString(T model) { JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = int.MaxValue; return serializer.Serialize(model); } #endregion /// /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串 /// 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; } /// /// 将时间字符串转为Json时间 /// 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; } /// /// 将时间字符串转为Json时间 /// private static string ConvertDateStringToJsonDate(string DateTime) { string result = string.Empty; DateTime dt = Convert.ToDateTime(DateTime); dt = dt.ToUniversalTime(); TimeSpan ts = dt - Convert.ToDateTime("1970-01-01"); result = string.Format("/Date({0}+0800)/", ts.TotalMilliseconds); return result; } /// /// 是否为日期+时间型字符串 /// /// /// public static bool IsTDateTime(string StrSource) { return Regex.IsMatch(StrSource, @"^(((((1[6-9]|[2-9]d)d{2})-(0?|1)-(0?[1-9]|d|3))|(((1[6-9]|[2-9]d)d{2})-(0?|1)-(0?[1-9]|d|30))|(((1[6-9]|[2-9]d)d{2})-0?2-(0?[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0||)|((16||)00))-0?2-29-)) (20|21|22|23|[0-1]?d):[0-5]?d:[0-5]?d)$ "); } } }