using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace CY.Infrastructure.Common { /// /// JSON对象帮助类 /// public class JsonHelper { #region 私有变量 #endregion #region 公有属性 #endregion #region 私有方法 private static object GetObjectByJsonStringAndClientArray(string jsonString) { List lists = null; //参数检测 if (string.IsNullOrEmpty(jsonString)) return lists; lists = new List(); object objTemp = JsonConvert.DeserializeObject(jsonString); Newtonsoft.Json.Linq.JArray jArray = (Newtonsoft.Json.Linq.JArray)objTemp; for (int i = 0; i < jArray.Count; i++) { Newtonsoft.Json.Linq.JValue jValue = (Newtonsoft.Json.Linq.JValue)jArray[i]; string item = jValue.Value.ToString(); lists.Add(item); } return lists; } private static object GetObjectByJsonStringAndClientObject(string jsonString) { Dictionary dic = null; //参数检测 if (string.IsNullOrEmpty(jsonString)) return dic; object objTemp = JsonConvert.DeserializeObject(jsonString); Newtonsoft.Json.Linq.JObject jObject = (Newtonsoft.Json.Linq.JObject)objTemp; //获取结构 dic = new Dictionary(); IEnumerable jProperties = jObject.Properties(); foreach (Newtonsoft.Json.Linq.JProperty jProperty in jProperties) { string value = string.Empty; string key = jProperty.Name; Newtonsoft.Json.Linq.JValue jValue = (Newtonsoft.Json.Linq.JValue)jObject[key]; if (jValue.Value == null || Convert.ToString(jValue.Value) == "") { value = ""; } else { value = jValue.Value.ToString(); } dic.Add(key, value); } return dic; } private static object GetObjectByJsonStringAndClientDataTable(string jsonString) { DataTable dataTable = null; //参数检测 if (string.IsNullOrEmpty(jsonString)) return dataTable; //获取客户端DataTable对象 object objTemp = JsonConvert.DeserializeObject(jsonString); //将objTemp转为JArray Newtonsoft.Json.Linq.JArray jArray = (Newtonsoft.Json.Linq.JArray)objTemp; //收集DataTable的栏目名称,根据JArray数组第1个结点信息 dataTable = new DataTable(); Newtonsoft.Json.Linq.JObject jObjectFirst = (Newtonsoft.Json.Linq.JObject)jArray[0]; IEnumerable jProperties = jObjectFirst.Properties(); foreach (Newtonsoft.Json.Linq.JProperty jProperty in jProperties) { string columnName = jProperty.Name; dataTable.Columns.Add(columnName, typeof(string)); } //加载数据 for (int i = 0; i < jArray.Count; i++) { DataRow rowAdd = dataTable.NewRow(); Newtonsoft.Json.Linq.JObject array = (Newtonsoft.Json.Linq.JObject)jArray[i]; foreach (DataColumn column in dataTable.Columns) { object columnValue = null; string columnName = column.ColumnName; Newtonsoft.Json.Linq.JValue jValue = (Newtonsoft.Json.Linq.JValue)array[columnName]; columnValue = jValue.Value; rowAdd[columnName] = columnValue; } dataTable.Rows.Add(rowAdd); } return dataTable; } #endregion #region 公有方法 public static string GetJsonStringByObject(object objData) { string jsonString = string.Empty; //参数检测 if (objData == null) return jsonString; var iso = new IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; jsonString = JsonConvert.SerializeObject(objData, iso); return jsonString.Replace("\"\\/Date(", "new Date(").Replace(")\\/\"", ")");//针对DateTime类型格式化(客户端直接ToString()便是yyyy-MM-dd HH:mm:ss) } public static string GetJsonStringByDataTable(DataTable dataTable) { string jsonString = string.Empty; //参数检测 if (dataTable == null || dataTable.Rows.Count == 0) return jsonString; jsonString = JsonConvert.SerializeObject(dataTable); return jsonString; } public static string GetJsonStringByDataTable(DataTable dataTable, string tableName) { string jsonString = string.Empty; //参数检测 if (dataTable == null || dataTable.Rows.Count == 0) return jsonString; dataTable.TableName = tableName; jsonString = JsonConvert.SerializeObject(dataTable); return jsonString; } public static object GetObjectByJsonString(string jsonString, JsonDataType jsonDataType) { return JsonHelper.GetObjectByJsonString(jsonString, jsonDataType.ToString()); } public static object GetObjectByJsonString(string jsonString, string jsonDataType) { object objReturn = null; //参数检测 if (string.IsNullOrEmpty(jsonString)) return objReturn; if (string.IsNullOrEmpty(jsonDataType)) return objReturn; switch (jsonDataType.Trim().ToLower()) { case "array": objReturn = JsonConvert.DeserializeObject(jsonString, typeof(string[])); break; case "list": objReturn = JsonConvert.DeserializeObject(jsonString, typeof(List)); break; case "dictionary": objReturn = JsonConvert.DeserializeObject(jsonString, typeof(Dictionary)); break; case "dataset": objReturn = JsonConvert.DeserializeObject(jsonString, typeof(DataSet)); break; case "datatable": objReturn = JsonConvert.DeserializeObject(jsonString, typeof(DataTable)); break; case "clientarray": objReturn = JsonHelper.GetObjectByJsonStringAndClientArray(jsonString); break; case "clientobject": objReturn = JsonHelper.GetObjectByJsonStringAndClientObject(jsonString); break; case "clientdatatable": objReturn = JsonHelper.GetObjectByJsonStringAndClientDataTable(jsonString); break; default: break; } return objReturn; } #endregion } }