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

浙公网安备 33010602011771号