DataTableToJson.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. namespace SIMDP.DAL.DalData
  7. {
  8. public class DataTableToJson
  9. {
  10. /// <summary>
  11. /// Datatable转换为Json
  12. /// </summary>
  13. /// <param name="table">Datatable对象</param>
  14. /// <returns>Json字符串</returns>
  15. public static string ToJson(DataTable dt)
  16. {
  17. StringBuilder jsonString = new StringBuilder();
  18. jsonString.Append("[");
  19. DataRowCollection drc = dt.Rows;
  20. for (int i = 0; i < drc.Count; i++)
  21. {
  22. jsonString.Append("{");
  23. for (int j = 0; j < dt.Columns.Count; j++)
  24. {
  25. string strKey = dt.Columns[j].ColumnName;
  26. string strValue = drc[i][j].ToString();
  27. Type type = dt.Columns[j].DataType;
  28. jsonString.Append("\"" + strKey + "\":");
  29. strValue = StringFormat(strValue, type);
  30. if (j < dt.Columns.Count - 1)
  31. {
  32. jsonString.Append(strValue + ",");
  33. }
  34. else
  35. {
  36. jsonString.Append(strValue);
  37. }
  38. }
  39. jsonString.Append("},");
  40. }
  41. jsonString.Remove(jsonString.Length - 1, 1);
  42. jsonString.Append("]");
  43. return jsonString.ToString();
  44. }
  45. /// <summary>
  46. /// 格式化字符型、日期型、布尔型
  47. /// </summary>
  48. /// <param name="str"></param>
  49. /// <param name="type"></param>
  50. /// <returns></returns>
  51. private static string StringFormat(string str, Type type)
  52. {
  53. if (type == typeof(string))
  54. {
  55. str = String2Json(str);
  56. str = "\"" + str + "\"";
  57. }
  58. else if (type == typeof(DateTime))
  59. {
  60. str = "\"" + str + "\"";
  61. }
  62. else if (type == typeof(bool))
  63. {
  64. str = str.ToLower();
  65. }
  66. else if (type != typeof(string) && string.IsNullOrEmpty(str))
  67. {
  68. str = "\"" + str + "\"";
  69. }
  70. return str;
  71. }
  72. /// <summary>
  73. /// 过滤特殊字符
  74. /// </summary>
  75. /// <param name="s">字符串</param>
  76. /// <returns>json字符串</returns>
  77. public static string String2Json(String s)
  78. {
  79. StringBuilder sb = new StringBuilder();
  80. for (int i = 0; i < s.Length; i++)
  81. {
  82. char c = s.ToCharArray()[i];
  83. switch (c)
  84. {
  85. //case '\"':
  86. // sb.Append("\""); break;
  87. case '\\':
  88. sb.Append(""); break;
  89. case '/':
  90. sb.Append("\\/"); break;
  91. case '\b':
  92. sb.Append("\\b"); break;
  93. case '\f':
  94. sb.Append("\\f"); break;
  95. case '\n':
  96. sb.Append("\\n"); break;
  97. case '\r':
  98. sb.Append("\\r"); break;
  99. case '\t':
  100. sb.Append(""); break;
  101. default:
  102. sb.Append(c); break;
  103. }
  104. }
  105. return sb.ToString();
  106. }
  107. }
  108. }