标题不正确,只是把datatable转成json格式的字符串,其实自己循环拼接一下也就行了,但既然有DataTable这种东西,那么不如把它扩展一下,直接输出不是更快?
于是我把它写成了扩展方法,没有这个需求的话,把this去掉,可以当成普通方法来用
第二个方法我重载了一个可以选择字段的方法,这样可以减少不必要的传输量
//DataTable转成Json public static string ToJson(this DataTable dt, string jsonName) { StringBuilder Json = new StringBuilder(); Json.Append("{\"" + jsonName + "\":["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { Json.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\""); if (j < dt.Columns.Count - 1) { Json.Append(","); } } Json.Append("}"); if (i < dt.Rows.Count - 1) { Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); } /// <summary>选取自定义的列生成json字符串</summary> /// <param name="tableSource">数据库查询结果</param> /// <param name="fields">需要添加进来的字段名</param> /// <returns></returns> public static string ToJson(this DataTable tableSource, string jsonName, params string[] fields) { if (fields.Count() < 1) throw new Exception("fields count must be 1 or more");//至少要转化一列 string jsonData = "{'" + jsonName + "':["; if (tableSource.Rows.Count > 0) { foreach (DataRow row in tableSource.Rows) { jsonData += "{"; for (int i = 0; i < fields.Length; i++) jsonData += "'" + fields[i] + "':'" + row[fields[i]] + "',"; jsonData = jsonData.Substring(0, jsonData.Length - 1); jsonData += "},"; } jsonData = jsonData.Substring(0, jsonData.Length - 1); jsonData += "]}"; } else { jsonData += "]}"; } return jsonData; }