首页 > 代码库 > 目前为止用过的最好的Json互转工具类ConvertJson

目前为止用过的最好的Json互转工具类ConvertJson

  1 /// <summary>  2     ///ConvertJson 的摘要说明  3     /// </summary>  4     public class ConvertJson  5     {  6         #region 私有方法  7         /// <summary>  8         /// 过滤特殊字符  9         /// </summary> 10         /// <param name="s">字符串</param> 11         /// <returns>json字符串</returns> 12         private static string String2Json(String s) 13         { 14             StringBuilder sb = new StringBuilder(); 15             for (int i = 0; i < s.Length; i++) 16             { 17                 char c = s.ToCharArray()[i]; 18                 switch (c) 19                 { 20                     case \": 21                         sb.Append("\\\""); break; 22                     case \\: 23                         sb.Append("\\\\"); break; 24                     case /: 25                         sb.Append("\\/"); break; 26                     case \b: 27                         sb.Append("\\b"); break; 28                     case \f: 29                         sb.Append("\\f"); break; 30                     case \n: 31                         sb.Append("\\n"); break; 32                     case \r: 33                         sb.Append("\\r"); break; 34                     case \t: 35                         sb.Append("\\t"); break; 36                     default: 37                         sb.Append(c); break; 38                 } 39             } 40             return sb.ToString(); 41         } 42         /// <summary> 43         /// 格式化字符型、日期型、布尔型 44         /// </summary> 45         /// <param name="str"></param> 46         /// <param name="type"></param> 47         /// <returns></returns> 48         private static string StringFormat(string str, Type type) 49         { 50             if (type == typeof(string)) 51             { 52                 str = String2Json(str); 53                 str = "\"" + str + "\""; 54             } 55             else if (type == typeof(DateTime)) 56             { 57                 str = "\"" + str + "\""; 58             } 59             else if (type == typeof(bool)) 60             { 61                 if (str != "") 62                 { 63                     str = str.ToLower(); 64                 } 65                 else 66                 { 67                     str = "\"" + str + "\""; 68                 } 69             } 70             else if (type != typeof(string) && string.IsNullOrEmpty(str)) 71             { 72                 str = "\"" + str + "\""; 73             } 74             return str; 75         } 76  77         #endregion 78  79         #region list转换成JSON 80         /// <summary> 81         /// list转换为Json 82         /// </summary> 83         /// <typeparam name="T"></typeparam> 84         /// <param name="list"></param> 85         /// <returns></returns> 86         public static string ListToJson<T>(IList<T> list) 87         { 88             object obj = list[0]; 89             return ListToJson<T>(list, obj.GetType().Name); 90         } 91         /// <summary> 92         /// list转换为json 93         /// </summary> 94         /// <typeparam name="T1"></typeparam> 95         /// <param name="list"></param> 96         /// <param name="p"></param> 97         /// <returns></returns> 98         private static string ListToJson<T>(IList<T> list, string JsonName) 99         {100             StringBuilder Json = new StringBuilder();101             if (string.IsNullOrEmpty(JsonName))102                 JsonName = list[0].GetType().Name;103             Json.Append("{\"" + JsonName + "\":[");104             if (list.Count > 0)105             {106                 for (int i = 0; i < list.Count; i++)107                 {108                     T obj = Activator.CreateInstance<T>();109                     PropertyInfo[] pi = obj.GetType().GetProperties();110                     Json.Append("{");111                     for (int j = 0; j < pi.Length; j++)112                     {113                         Type type = pi[j].GetValue(list[i], null).GetType();114                         Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));115                         if (j < pi.Length - 1)116                         {117                             Json.Append(",");118                         }119                     }120                     Json.Append("}");121                     if (i < list.Count - 1)122                     {123                         Json.Append(",");124                     }125                 }126             }127             Json.Append("]}");128             return Json.ToString();129         }130         #endregion131 132         #region 对象转换为Json133         /// <summary>134         /// 对象转换为json135         /// </summary>136         /// <param name="jsonObject">json对象</param>137         /// <returns>json字符串</returns>138         public static string ToJson(object jsonObject)139         {140             string jsonString = "{";141             PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();142             for (int i = 0; i < propertyInfo.Length; i++)143             {144                 object objectValue = http://www.mamicode.com/propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);145                 string value = http://www.mamicode.com/string.Empty;146                 if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)147                 {148                     value = http://www.mamicode.com/"" + objectValue.ToString() + "";149                 }150                 else if (objectValue is string)151                 {152                     value = http://www.mamicode.com/"" + ToJson(objectValue.ToString()) + "";153                 }154                 else if (objectValue is IEnumerable)155                 {156                     value =http://www.mamicode.com/ ToJson((IEnumerable)objectValue);157                 }158                 else159                 {160                     value =http://www.mamicode.com/ ToJson(objectValue.ToString());161                 }162                 jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";163             }164             jsonString.Remove(jsonString.Length - 1, jsonString.Length);165             return jsonString + "}";166         }167 168         #endregion169 170         #region 对象集合转换为json171         /// <summary>172         /// 对象集合转换为json173         /// </summary>174         /// <param name="array">对象集合</param>175         /// <returns>json字符串</returns>176         public static string ToJson(IEnumerable array)177         {178             string jsonString = "{";179             foreach (object item in array)180             {181                 jsonString += ToJson(item) + ",";182             }183             jsonString.Remove(jsonString.Length - 1, jsonString.Length);184             return jsonString + "]";185         }186         #endregion187 188         #region 普通集合转换Json189         /// <summary>    190         /// 普通集合转换Json   191         /// </summary>   192         /// <param name="array">集合对象</param> 193         /// <returns>Json字符串</returns>  194         public static string ToArrayString(IEnumerable array)195         {196             string jsonString = "[";197             foreach (object item in array)198             {199                 jsonString = ToJson(item.ToString()) + ",";200             }201             jsonString.Remove(jsonString.Length - 1, jsonString.Length);202             return jsonString + "]";203         }204         #endregion205 206         #region  DataSet转换为Json207         /// <summary>    208         /// DataSet转换为Json   209         /// </summary>    210         /// <param name="dataSet">DataSet对象</param>   211         /// <returns>Json字符串</returns>    212         public static string ToJson(DataSet dataSet)213         {214             string jsonString = "{";215             foreach (DataTable table in dataSet.Tables)216             {217                 jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";218             }219             jsonString = jsonString.TrimEnd(,);220             return jsonString + "}";221         }222         #endregion223 224         #region Datatable转换为Json225         /// <summary>     226         /// Datatable转换为Json     227         /// </summary>    228         /// <param name="table">Datatable对象</param>     229         /// <returns>Json字符串</returns>     230         public static string ToJson(DataTable dt)231         {232             StringBuilder jsonString = new StringBuilder();233             jsonString.Append("[");234             DataRowCollection drc = dt.Rows;235             for (int i = 0; i < drc.Count; i++)236             {237                 jsonString.Append("{");238                 for (int j = 0; j < dt.Columns.Count; j++)239                 {240                     string strKey = dt.Columns[j].ColumnName;241                     string strValue =http://www.mamicode.com/ drc[i][j].ToString();242                     Type type = dt.Columns[j].DataType;243                     jsonString.Append("\"" + strKey + "\":");244                     strValue =http://www.mamicode.com/ StringFormat(strValue, type);245                     if (j < dt.Columns.Count - 1)246                     {247                         jsonString.Append(strValue + ",");248                     }249                     else250                     {251                         jsonString.Append(strValue);252                     }253                 }254                 jsonString.Append("},");255             }256             jsonString.Remove(jsonString.Length - 1, 1);257             jsonString.Append("]");258             return jsonString.ToString();259         }260         /// <summary>    261         /// DataTable转换为Json     262         /// </summary>    263         public static string ToJson(DataTable dt, string jsonName)264         {265             StringBuilder Json = new StringBuilder();266             if (string.IsNullOrEmpty(jsonName))267                 jsonName = dt.TableName;268             Json.Append("{\"" + jsonName + "\":[");269             if (dt.Rows.Count > 0)270             {271                 for (int i = 0; i < dt.Rows.Count; i++)272                 {273                     Json.Append("{");274                     for (int j = 0; j < dt.Columns.Count; j++)275                     {276                         Type type = dt.Rows[i][j].GetType();277                         Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));278                         if (j < dt.Columns.Count - 1)279                         {280                             Json.Append(",");281                         }282                     }283                     Json.Append("}");284                     if (i < dt.Rows.Count - 1)285                     {286                         Json.Append(",");287                     }288                 }289             }290             Json.Append("]}");291             return Json.ToString();292         }293 294         #endregion295 296         #region DataReader转换为Json297         /// <summary>     298         /// DataReader转换为Json     299         /// </summary>     300         /// <param name="dataReader">DataReader对象</param>     301         /// <returns>Json字符串</returns>  302         public static string ToJson(DbDataReader dataReader)303         {304             StringBuilder jsonString = new StringBuilder();305             jsonString.Append("[");306             while (dataReader.Read())307             {308                 jsonString.Append("{");309                 for (int i = 0; i < dataReader.FieldCount; i++)310                 {311                     Type type = dataReader.GetFieldType(i);312                     string strKey = dataReader.GetName(i);313                     string strValue =http://www.mamicode.com/ dataReader[i].ToString();314                     jsonString.Append("\"" + strKey + "\":");315                     strValue =http://www.mamicode.com/ StringFormat(strValue, type);316                     if (i < dataReader.FieldCount - 1)317                     {318                         jsonString.Append(strValue + ",");319                     }320                     else321                     {322                         jsonString.Append(strValue);323                     }324                 }325                 jsonString.Append("},");326             }327             dataReader.Close();328             jsonString.Remove(jsonString.Length - 1, 1);329             jsonString.Append("]");330             return jsonString.ToString();331         }332         #endregion333     }

 

目前为止用过的最好的Json互转工具类ConvertJson