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;

    }

你可能感兴趣的:(Datatable)