你的位置:首页 > ASP.net教程

[ASP.net教程]JSON格式互转集合


  在工作中我们经常会遇到格式转换的问题,有的时候是将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("'", "&apos;").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", "&quot;")); 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("'", "&apos;").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", "&quot;")); 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("'", "&apos;").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", "&quot;") + "\""); 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