DataTable To Json

标题不正确,只是把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;
    }
原文地址:https://www.cnblogs.com/walkerwang/p/1989778.html