C#中任意类型数据转成JSON格式数据输出

注:该文是以前所写,现在看来已经毫无意义了。当时还没接触过JSON.NET ,好像.NET 2.0中也没有自带的to json的相关方法。

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

你可能感兴趣的:(json,list,String,C#,null)