DataTable To Json
时间:2011-03-20 来源:walkerwang
标题不正确,只是把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;
}
相关阅读 更多 +









