在工作中我们经常会遇到格式转换的问题,有的时候是将JSON转换成DataTable、DataSet或是List等,也有可能将DataTable、DataSet或是List转换成JSON的,抽了点时间把这些方法整合了一下,希望对大家有所帮助,如果有什么问题请指出来,共同探讨。
代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Text; 6 using System.Data; 7 using System.Data.Common; 8 using System.Collections; 9 using System.Reflection; 10 11 namespace BJYX.WEB.Public 12 { 13 public class Creat_Json 14 { 15 public Creat_Json() 16 { 17 // 18 // TODO: 在此处添加构造函数逻辑 19 // 20 } 21 22 public static string DataTable2Json(System.Data.DataTable dt) 23 { 24 System.Text.StringBuilder jsonBuilder = new System.Text.StringBuilder(); 25 jsonBuilder.Append("{"); 26 jsonBuilder.AppendFormat("\"total\":{0}, ", dt.Rows.Count); 27 jsonBuilder.Append("\"rows\":[ "); 28 for (int i = 0; i < dt.Rows.Count; i++) 29 { 30 jsonBuilder.Append("{"); 31 for (int j = 0; j < dt.Columns.Count; j++) 32 { 33 jsonBuilder.Append("\""); 34 jsonBuilder.Append(dt.Columns[j].ColumnName); 35 jsonBuilder.Append("\":\""); 36 jsonBuilder.Append(dt.Rows[i][j].ToString().Replace("\\", "\\\\").Replace("'", "'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", """)); 37 jsonBuilder.Append("\","); 38 } 39 jsonBuilder.Remove(jsonBuilder.Length - 1, 1); 40 jsonBuilder.Append("},"); 41 } 42 jsonBuilder.Remove(jsonBuilder.Length - 1, 1); 43 jsonBuilder.Append("]"); 44 jsonBuilder.Append("}"); 45 return jsonBuilder.ToString(); 46 } 47 public static string DataTable2Json(System.Data.DataTable dt, int count) 48 { 49 System.Text.StringBuilder jsonBuilder = new System.Text.StringBuilder(); 50 jsonBuilder.Append("{"); 51 jsonBuilder.AppendFormat("\"total\":{0}, ", count); 52 jsonBuilder.Append("\"rows\":[ "); 53 for (int i = 0; i < dt.Rows.Count; i++) 54 { 55 jsonBuilder.Append("{"); 56 for (int j = 0; j < dt.Columns.Count; j++) 57 { 58 jsonBuilder.Append("\""); 59 jsonBuilder.Append(dt.Columns[j].ColumnName); 60 jsonBuilder.Append("\":\""); 61 jsonBuilder.Append(dt.Rows[i][j].ToString().Replace("\\", "\\\\").Replace("'", "'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", """)); 62 jsonBuilder.Append("\","); 63 } 64 jsonBuilder.Remove(jsonBuilder.Length - 1, 1); 65 jsonBuilder.Append("},"); 66 } 67 jsonBuilder.Remove(jsonBuilder.Length - 1, 1); 68 jsonBuilder.Append("]"); 69 jsonBuilder.Append("}"); 70 return jsonBuilder.ToString(); 71 } 72 public static string DataTableToJson(System.Data.DataTable dt) 73 { 74 StringBuilder Json = new StringBuilder(); 75 Json.Append("["); 76 if (dt.Rows.Count > 0) 77 { 78 for (int i = 0; i < dt.Rows.Count; i++) 79 { 80 Json.Append("{"); 81 for (int j = 0; j < dt.Columns.Count; j++) 82 { 83 Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString().Replace("\\", "\\\\").Replace("'", "'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", """) + "\""); 84 if (j < dt.Columns.Count - 1) 85 { 86 Json.Append(","); 87 } 88 } 89 Json.Append("}"); 90 if (i < dt.Rows.Count - 1) 91 { 92 Json.Append(","); 93 } 94 } 95 } 96 Json.Append("]"); 97 return Json.ToString().Replace("\\", "\\\\").Replace("\'", "\\\'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>");//.Replace("\"", "'"); ; 98 } 99 100 /// <summary>101 /// Table to JSON By FlexGrid102 /// </summary>103 /// <param name="ds"></param>104 /// <param name="page"></param>105 /// <returns></returns>106 public static string DataTableToJson(System.Data.DataTable dt, int page, int total)107 {108 StringBuilder jsonStr = new StringBuilder();109 jsonStr.Append("{");110 jsonStr.Append("\"page\":" + page + ",");111 jsonStr.Append("\"total\":" + total + ",");112 jsonStr.Append("\"rows\":");113 jsonStr.Append("[");114 115 foreach (System.Data.DataRow dr in dt.Rows)116 {117 jsonStr.Append("{");118 119 foreach (System.Data.DataColumn dc in dt.Columns)120 {121 jsonStr.Append("\"");122 jsonStr.Append(dc.ColumnName);123 jsonStr.Append("\"");124 jsonStr.Append(":");125 126 jsonStr.Append("\"");127 jsonStr.Append(dr[dc].ToString().Trim());128 jsonStr.Append("\" ,");129 }130 131 jsonStr.Remove(jsonStr.Length - 1, 1);132 jsonStr.Append("}");133 jsonStr.Append(",");134 }135 if (dt.Rows.Count > 0)136 {137 jsonStr.Remove(jsonStr.Length - 1, 1);138 }139 jsonStr.Append("]");140 jsonStr.Append("}");141 142 return jsonStr.ToString();143 }144 145 /// <summary> 146 /// List转成json 147 /// </summary> 148 /// <typeparam name="T"></typeparam> 149 /// <param name="jsonName"></param> 150 /// <param name="list"></param> 151 /// <returns></returns> 152 public static string ListToJson<T>(IList<T> list, string jsonName)153 {154 StringBuilder Json = new StringBuilder();155 if (string.IsNullOrEmpty(jsonName))156 jsonName = list[0].GetType().Name;157 Json.Append("{\"" + jsonName + "\":[");158 if (list.Count > 0)159 {160 for (int i = 0; i < list.Count; i++)161 {162 T obj = Activator.CreateInstance<T>();163 PropertyInfo[] pi = obj.GetType().GetProperties();164 Json.Append("{");165 for (int j = 0; j < pi.Length; j++)166 {167 Type type = pi[j].GetValue(list[i], null).GetType();168 Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));169 170 if (j < pi.Length - 1)171 {172 Json.Append(",");173 }174 }175 Json.Append("}");176 if (i < list.Count - 1)177 {178 Json.Append(",");179 }180 }181 }182 Json.Append("]}");183 return Json.ToString();184 }185 186 /// <summary> 187 /// List转成json 188 /// </summary> 189 /// <typeparam name="T"></typeparam> 190 /// <param name="list"></param> 191 /// <returns></returns> 192 public static string ListToJson<T>(IList<T> list)193 {194 object obj = list[0];195 return ListToJson<T>(list, obj.GetType().Name);196 }197 198 /// <summary> 199 /// 对象转换为Json字符串 200 /// </summary> 201 /// <param name="jsonObject">对象</param> 202 /// <returns>Json字符串</returns> 203 public static string ToJson(object jsonObject)204 {205 string jsonString = "{";206 PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();207 for (int i = 0; i < propertyInfo.Length; i++)208 {209 object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);210 string value = string.Empty;211 if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)212 {213 value = "'" + objectValue.ToString() + "'";214 }215 else if (objectValue is string)216 {217 value = "'" + ToJson(objectValue.ToString()) + "'";218 }219 else if (objectValue is IEnumerable)220 {221 value = ToJson((IEnumerable)objectValue);222 }223 else224 {225 value = ToJson(objectValue.ToString());226 }227 jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";228 }229 jsonString.Remove(jsonString.Length - 1, jsonString.Length);230 return jsonString + "}";231 }232 233 /// <summary> 234 /// 对象集合转换Json 235 /// </summary> 236 /// <param name="array">集合对象</param> 237 /// <returns>Json字符串</returns> 238 public static string ToJson(IEnumerable array)239 {240 string jsonString = "[";241 foreach (object item in array)242 {243 jsonString += ToJson(item) + ",";244 }245 jsonString.Remove(jsonString.Length - 1, jsonString.Length);246 return jsonString + "]";247 }248 249 /// <summary> 250 /// 普通集合转换Json 251 /// </summary> 252 /// <param name="array">集合对象</param> 253 /// <returns>Json字符串</returns> 254 public static string ToArrayString(IEnumerable array)255 {256 string jsonString = "[";257 foreach (object item in array)258 {259 jsonString = ToJson(item.ToString()) + ",";260 }261 jsonString.Remove(jsonString.Length - 1, jsonString.Length);262 return jsonString + "]";263 }264 265 /// <summary> 266 /// Datatable转换为Json 267 /// </summary> 268 /// <param name="table">Datatable对象</param> 269 /// <returns>Json字符串</returns> 270 public static string ToJson(DataTable dt)271 {272 StringBuilder jsonString = new StringBuilder();273 jsonString.Append("[");274 DataRowCollection drc = dt.Rows;275 for (int i = 0; i < drc.Count; i++)276 {277 jsonString.Append("{");278 for (int j = 0; j < dt.Columns.Count; j++)279 {280 string strKey = dt.Columns[j].ColumnName;281 string strValue = drc[i][j].ToString();282 Type type = dt.Columns[j].DataType;283 jsonString.Append("\"" + strKey + "\":");284 strValue = StringFormat(strValue, type);285 if (j < dt.Columns.Count - 1)286 {287 jsonString.Append(strValue + ",");288 }289 else290 {291 jsonString.Append(strValue);292 }293 }294 jsonString.Append("},");295 }296 jsonString.Remove(jsonString.Length - 1, 1);297 jsonString.Append("]");298 return jsonString.ToString();299 }300 301 /// <summary> 302 /// DataTable转成Json 303 /// </summary> 304 /// <param name="jsonName"></param> 305 /// <param name="dt"></param> 306 /// <returns></returns> 307 public static string ToJson(DataTable dt, string jsonName)308 {309 StringBuilder Json = new StringBuilder();310 if (string.IsNullOrEmpty(jsonName))311 jsonName = dt.TableName;312 Json.Append("{\"" + jsonName + "\":[");313 if (dt.Rows.Count > 0)314 {315 for (int i = 0; i < dt.Rows.Count; i++)316 {317 Json.Append("{");318 for (int j = 0; j < dt.Columns.Count; j++)319 {320 Type type = dt.Rows[i][j].GetType();321 Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));322 if (j < dt.Columns.Count - 1)323 {324 Json.Append(",");325 }326 }327 Json.Append("}");328 if (i < dt.Rows.Count - 1)329 {330 Json.Append(",");331 }332 }333 }334 Json.Append("]}");335 return Json.ToString();336 }337 338 /// <summary> 339 /// DataReader转换为Json 340 /// </summary> 341 /// <param name="dataReader">DataReader对象</param> 342 /// <returns>Json字符串</returns> 343 public static string ToJson(DbDataReader dataReader)344 {345 StringBuilder jsonString = new StringBuilder();346 jsonString.Append("[");347 while (dataReader.Read())348 {349 jsonString.Append("{");350 for (int i = 0; i < dataReader.FieldCount; i++)351 {352 Type type = dataReader.GetFieldType(i);353 string strKey = dataReader.GetName(i);354 string strValue = dataReader[i].ToString();355 jsonString.Append("\"" + strKey + "\":");356 strValue = StringFormat(strValue, type);357 if (i < dataReader.FieldCount - 1)358 {359 jsonString.Append(strValue + ",");360 }361 else362 {363 jsonString.Append(strValue);364 }365 }366 jsonString.Append("},");367 }368 dataReader.Close();369 jsonString.Remove(jsonString.Length - 1, 1);370 jsonString.Append("]");371 return jsonString.ToString();372 }373 /// <summary>374 /// 将IList转成JSON375 /// </summary>376 /// <typeparam name="T"></typeparam>377 /// <param name="jsonName"></param>378 /// <param name="IL"></param>379 /// <returns></returns>380 public static string ObjectToJson<T>(IList<T> IL)381 {382 StringBuilder Json = new StringBuilder();383 Json.Append("[");384 if (IL.Count > 0)385 {386 for (int i = 0; i < IL.Count; i++)387 {388 T obj = Activator.CreateInstance<T>();389 Type type = obj.GetType();390 PropertyInfo[] pis = type.GetProperties();391 Json.Append("{");392 for (int j = 0; j < pis.Length; j++)393 {394 Json.Append("\"" + pis[j].Name.ToString() + "\":\"" + pis[j].GetValue(IL[i], null) + "\"");395 if (j < pis.Length - 1)396 {397 Json.Append(",");398 }399 }400 Json.Append("}");401 if (i < IL.Count - 1)402 {403 Json.Append(",");404 }405 }406 }407 Json.Append("]");408 return Json.ToString();409 }410 411 /// <summary>412 /// 将IList转成符合FlexiGrid控件格式的JSON413 /// </summary>414 /// <typeparam name="T"></typeparam>415 /// <param name="IL"></param>416 /// <param name="page">但前页</param>417 /// <param name="total">数据行数</param>418 /// <returns></returns>419 public static string ListToFlexiGridJson<T>(IList<T> IL, int page, int total)420 {421 StringBuilder Json = new StringBuilder();422 Json.Append("{");423 Json.Append("\"page\":" + page + ",");424 Json.Append("\"total\":" + total + ",");425 Json.Append("\"rows\":");426 Json.Append("[");427 428 if (IL.Count > 0)429 {430 for (int i = 0; i < IL.Count; i++)431 {432 T obj = Activator.CreateInstance<T>();433 Type type = obj.GetType();434 PropertyInfo[] pis = type.GetProperties();435 Json.Append("{");436 for (int j = 0; j < pis.Length; j++)437 {438 Json.Append("\"" + pis[j].Name.ToString() + "\":\"" + pis[j].GetValue(IL[i], null) + "\"");439 if (j < pis.Length - 1)440 {441 Json.Append(",");442 }443 }444 Json.Append("}");445 if (i < IL.Count - 1)446 {447 Json.Append(",");448 }449 }450 }451 Json.Append("]");452 Json.Append("}");453 return Json.ToString();454 }455 456 /// <summary> 457 /// DataSet转换为Json 458 /// </summary> 459 /// <param name="dataSet">DataSet对象</param> 460 /// <returns>Json字符串</returns> 461 public static string ToJson(DataSet dataSet)462 {463 string jsonString = "{";464 foreach (DataTable table in dataSet.Tables)465 {466 jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";467 }468 jsonString = jsonString.TrimEnd(',');469 return jsonString + "}";470 }471 472 /// <summary> 473 /// 过滤特殊字符 474 /// </summary> 475 /// <param name="s"></param> 476 /// <returns></returns> 477 private static string String2Json(String s)478 {479 StringBuilder sb = new StringBuilder();480 for (int i = 0; i < s.Length; i++)481 {482 char c = s.ToCharArray()[i];483 switch (c)484 {485 case '\"':486 sb.Append("\\\""); break;487 case '\\':488 sb.Append("\\\\"); break;489 case '/':490 sb.Append("\\/"); break;491 case '\b':492 sb.Append("\\b"); break;493 case '\f':494 sb.Append("\\f"); break;495 case '\n':496 sb.Append("\\n"); break;497 case '\r':498 sb.Append("\\r"); break;499 case '\t':500 sb.Append("\\t"); break;501 default:502 sb.Append(c); break;503 }504 }505 return sb.ToString();506 }507 508 /// <summary> 509 /// 格式化字符型、日期型、布尔型 510 /// </summary> 511 /// <param name="str"></param> 512 /// <param name="type"></param> 513 /// <returns></returns> 514 private static string StringFormat(string str, Type type)515 {516 if (type == typeof(string))517 {518 str = String2Json(str);519 str = "\"" + str + "\"";520 }521 else if (type == typeof(DateTime))522 {523 str = "\"" + str + "\"";524 }525 else if (type == typeof(bool))526 {527 str = str.ToLower();528 }529 return str;530 }531 532 533 }534 }
View Code
原标题:JSON格式互转集合
关键词:JS