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