方法一:
public static string GetJSON(DataTable dt)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\"totalCount\":" + dt.Rows.Count + ",\"data\":");
sb.Append("[");
try
{
if (dt.Rows.Count > 0)
{
Hashtable ht = new Hashtable();
for (int i = 0; i < dt.Columns.Count; i++)
{
ht.Add(i, dt.Columns[i].ColumnName);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
sb.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
sb.Append(string.Format("\"{0}\":\"{1}\",",
ht[j], dt.Rows[i][j].ToString()));
}
sb.Remove(sb.ToString().LastIndexOf(","), 1);
sb.Append("},");
}
sb.Remove(sb.ToString().LastIndexOf(","), 1);
ht.Clear();
ht = null;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
sb.Append("]}");
}
return sb.ToString();
}
方法二:用Newtonsoft.Json.Net20.dll(点击下载)
先添加 Newtonsoft.Json.Net20.dll 的引用
using System.Data;
using System.IO;
using Newtonsoft.Json;
/// <summary>将DateTable转为Json格式数据</summary>
/// <param name="dt">要转换的DataTable名称</param>
/// <param name="dtName">应该是转换后的Key如用Json.dtName得到数据</param>
/// <returns></returns>
public static string DataTableToJSON(DataTable dt, string dtName)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jw = new JsonTextWriter(sw))
{
JsonSerializer ser = new JsonSerializer();
jw.WriteStartObject();
jw.WritePropertyName(dtName);
jw.WriteStartArray();
foreach (DataRow dr in dt.Rows)
{
jw.WriteStartObject();
foreach (DataColumn dc in dt.Columns)
{
jw.WritePropertyName(dc.ColumnName);
ser.Serialize(jw, dr[dc].ToString());
}
jw.WriteEndObject();
}
jw.WriteEndArray();
jw.WriteEndObject();
sw.Close();
jw.Close();
}
return sb.ToString();
}