/****************************** * 说明:Json相关操作 * 创建人:龚宇超 * 创建日期:2017-10-23 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Web.Script.Serialization; using System.Collections; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Lskj.Util { /// /// Json 相关操作 /// public static class JsonUtil { /// /// Json 字符串 转换为 DataTable数据集合 /// /// /// public static DataTable ToComplexTable(string json) { DataTable dataTable = new DataTable(); //实例化 DataTable result; try { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值 ArrayList arrayList = javaScriptSerializer.Deserialize(json); if (arrayList.Count > 0) { foreach (Dictionary dictionary in arrayList) { if (dictionary.Keys.Count() == 0) { result = dataTable; return result; } //Columns if (dataTable.Columns.Count == 0) { foreach (string current in dictionary.Keys) { if (current != "data") dataTable.Columns.Add(current, dictionary[current].GetType()); else { ArrayList list = dictionary[current] as ArrayList; foreach (Dictionary dic in list) { foreach (string key in dic.Keys) { dataTable.Columns.Add(key, dic[key].GetType()); } break; } } } } //Rows string root = ""; foreach (string current in dictionary.Keys) { if (current != "data") root = current; else { ArrayList list = dictionary[current] as ArrayList; foreach (Dictionary dic in list) { DataRow dataRow = dataTable.NewRow(); dataRow[root] = dictionary[root]; foreach (string key in dic.Keys) { dataRow[key] = dic[key]; } dataTable.Rows.Add(dataRow); } } } } } } catch { } result = dataTable; return result; } /// /// 说明:json 字符串转换为DataTable /// 创建人:龚宇超 /// 创建日期:2017-10-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The json. /// DataTable. public static DataTable ToDataTable(this string json) { int interception = json.LastIndexOf(']'); json = json.Substring(0, interception + 1); DataTable dataTable = new DataTable(); //实例化 DataTable result; try { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值 ArrayList arrayList = javaScriptSerializer.Deserialize(json); if (arrayList != null && arrayList.Count > 0) { foreach (Dictionary dictionary in arrayList) { if (dictionary.Keys.Count() == 0) { result = dataTable; return result; } if (dataTable.Columns.Count == 0) { foreach (string current in dictionary.Keys) { dataTable.Columns.Add(current, dictionary[current].GetType()); } } DataRow dataRow = dataTable.NewRow(); foreach (string current in dictionary.Keys) { dataRow[current] = dictionary[current]; } dataTable.Rows.Add(dataRow); //循环添加行到DataTable中 } } } catch (Exception ex) { } result = dataTable; return result; } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2017-10-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The json. /// DataRow. public static DataRow ToDataRow(this string json) { if (string.IsNullOrWhiteSpace(json)) return null; JObject rowObject = JsonConvert.DeserializeObject(json); JArray jArray = new JArray(); jArray.Add(rowObject); DataTable table = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(jArray)); return table != null && table.Rows.Count > 0 ? table.Rows[0] : null; } /// /// 说明:DataTable To JsonArray /// 创建人:龚宇超 /// 创建日期:2017-10-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The dt table. /// System.String. public static string ToJsonArray(this DataTable dtTable) { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值 ArrayList arrayList = new ArrayList(); foreach (DataRow dataRow in dtTable.Rows) { Dictionary dictionary = new Dictionary(); //实例化一个参数集合 foreach (DataColumn dataColumn in dtTable.Columns) { dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToStr()); } arrayList.Add(dictionary); //ArrayList集合中添加键值 } return javaScriptSerializer.Serialize(arrayList); //返回一个json字符串 } /// /// 说明:DataRow To Json /// 创建人:龚宇超 /// 创建日期:2017-10-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The row. /// System.String. public static string ToJsonObject(this DataRow row) { DataTable dataTable = row.Table.Clone(); DataRow dataRow = dataTable.NewRow(); dataRow.ItemArray = row.ItemArray; dataTable.Rows.Add(dataRow); JArray jArray = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(dataTable)); return jArray[0] + ""; } } }