- A+
所属分类:.NET技术
1 #region 数据表DataTable 转键值对集合 List 2 /// <summary> 3 /// 数据表DataTable 转键值对集合 List 4 /// 把DataTable转成 List集合, 存每一行 5 /// 集合中放的是键值对字典,存每一列 6 /// </summary> 7 /// <param name="dt">数据表</param> 8 /// <returns>哈希表数组</returns> 9 public static List<Dictionary<string, object>> DataTableToList(DataTable dt) 10 { 11 List<Dictionary<string, object>> list 12 = new List<Dictionary<string, object>>(); 13 14 foreach (DataRow dr in dt.Rows) 15 { 16 Dictionary<string, object> dic = new Dictionary<string, object>(); 17 foreach (DataColumn dc in dt.Columns) 18 { 19 dic.Add(dc.ColumnName, dr[dc.ColumnName]); 20 } 21 list.Add(dic); 22 } 23 return list; 24 } 25 #endregion 26 27 #region 数据集转键值对数组字典 28 29 /// <summary> 30 /// 数据集转键值对数组字典 31 /// </summary> 32 /// <param name="dataSet">数据集</param> 33 /// <returns>键值对数组字典</returns> 34 public static Dictionary<string, List<Dictionary<string, object>>> DataSetToDic(DataSet ds) 35 { 36 Dictionary<string, List<Dictionary<string, object>>> result = new Dictionary<string, List<Dictionary<string, object>>>(); 37 38 foreach (DataTable dt in ds.Tables) 39 result.Add(dt.TableName, DataTableToList(dt)); 40 41 return result; 42 } 43 #endregion 44 45 #region 数据表Tables 转JSON 46 /// <summary> 47 /// 数据表转Tables JSON 48 /// </summary> 49 /// <param name="dataTable">数据表</param> 50 /// <returns>JSON字符串</returns> 51 public static string DataTableToJSON(DataTable dt) 52 { 53 return JsonHelper.ObjectToJSON(DataTableToList(dt)); 54 } 55 #endregion 56 57 #region 将datatable转换为json 58 /// <summary> 59 /// 将datatable转换为json 60 /// </summary> 61 /// <param name="dtb">Dt</param> 62 /// <returns>JSON字符串</returns> 63 public static string Dtb2Json(DataTable dtb) 64 { 65 //JavaScriptSerializer jss = new JavaScriptSerializer(); 66 67 System.Collections.ArrayList dic = new System.Collections.ArrayList(); 68 69 foreach (DataRow dr in dtb.Rows) 70 { 71 System.Collections.Generic.Dictionary<string, object> drow = new System.Collections.Generic.Dictionary<string, object>(); 72 73 foreach (DataColumn dc in dtb.Columns) 74 { 75 drow.Add(dc.ColumnName, dr[dc.ColumnName]); 76 } 77 78 dic.Add(drow); 79 } 80 81 return null; 82 } 83 #endregion 84 85 #region 将Dictionary转换为数据表数据 Tables 86 public static DataTable DictToDataTable(Dictionary<string, object> dict) 87 { 88 DataTable dt = new DataTable(); 89 90 //dt.Columns.Add("ID", typeof(Guid)); 91 //dt.Columns.Add("DID", typeof(string)); 92 //dt.Columns.Add("DEPARTMENTNUM", typeof(string)); 93 //dt.Columns.Add("DEPARTMENTNAME", typeof(string)); 94 //dt.Columns.Add("REMARKS", typeof(string)); 95 96 foreach (var colName in dict.Keys) 97 { 98 dt.Columns.Add(colName, typeof(string)); 99 } 100 DataRow dr = dt.NewRow(); 101 foreach (KeyValuePair<string, object> item in dict) 102 { 103 dr[item.Key] = item.Value; 104 } 105 dt.Rows.Add(dr); 106 return dt; 107 } 108 #endregion 109 110 #region 将List转换为数据表数据 Tables 111 /// <summary> 112 /// List转DataTable 113 /// </summary> 114 public static DataTable ListToDataTable<T>(List<T> list) 115 { 116 if (list == null || list.Count == 0) 117 { 118 return new DataTable(); 119 } 120 121 //获取T下所有的属性 122 Type entityType = list[0].GetType(); 123 PropertyInfo[] entityProperties = entityType.GetProperties(); 124 125 DataTable dt = new DataTable("data"); 126 127 for (int i = 0; i < entityProperties.Length; i++) 128 { 129 dt.Columns.Add(entityProperties[i].Name); 130 } 131 132 foreach (var item in list) 133 { 134 if (item.GetType() != entityType) 135 { 136 throw new Exception("要转换集合元素类型不一致!"); 137 } 138 //创建一个用于放所有属性值的数组 139 object[] entityValues = new object[entityProperties.Length]; 140 for (int i = 0; i < entityProperties.Length; i++) 141 { 142 entityValues[i] = entityProperties[i].GetValue(item, null); 143 } 144 145 dt.Rows.Add(entityValues); 146 } 147 return dt; 148 } 149 #endregion 150 151 #region Json 字符串 转换为 DataTable数据集合 简要版,正在使用中 152 /// <summary> 153 /// Json 字符串 转换为 DataTable数据集合 简要版,正在使用中 154 /// </summary> 155 /// <param name="json"></param> 156 /// <returns></returns> 157 /// 158 //格式; 159 //[{"mac":"20:f1:7c:c5:cd:80","rssi":"-86","ch":"9"},{"mac":"20:f1:7c:c5:cd:85","rssi":"-91","ch":"9"}] 160 public static DataTable ToDataTableTwo(string json) 161 { 162 DataTable dataTable = new DataTable(); //实例化 163 DataTable result; 164 try 165 { 166 List<Dictionary<string, object>> arrayList = JsonHelper.JSONToObject<List<Dictionary<string, object>>>(json); 167 168 if (arrayList != null && arrayList.Count > 0) 169 { 170 foreach (Dictionary<string, object> dictionary in arrayList) 171 { 172 if (dictionary.Keys.Count == 0) 173 { 174 result = dataTable; 175 return result; 176 } 177 178 //Columns 179 if (dataTable.Columns.Count == 0) 180 { 181 foreach (var current in dictionary) 182 { 183 if (current.Value != null) 184 { 185 dataTable.Columns.Add(current.Key, current.Value.GetType()); 186 } 187 else 188 { 189 dataTable.Columns.Add(current.Key); 190 } 191 } 192 } 193 194 //Rows 195 DataRow dataRow = dataTable.NewRow(); 196 197 foreach (string current in dictionary.Keys) 198 { 199 if (dictionary[current] != null) 200 { 201 dataRow[current] = dictionary[current]; 202 } 203 } 204 205 dataTable.Rows.Add(dataRow); //循环添加行到DataTable中 206 } 207 } 208 } 209 catch (Exception ex) 210 { 211 throw ex; 212 } 213 214 result = dataTable; 215 return result; 216 } 217 #endregion