C#中把Datatable转换为Json的5个代码实例

一、

/// <summary>     

    /// Datatable转换为Json     

    /// </summary>    

    /// <param name="table">Datatable对象</param>     

    /// <returns>Json字符串</returns>     

    public static string ToJson(DataTable dt)

    {

        StringBuilder jsonString = new StringBuilder();

        jsonString.Append("[");

        DataRowCollection drc = dt.Rows;

        for (int i = 0; i < drc.Count; i++)

        {

            jsonString.Append("{");

            for (int j = 0; j < dt.Columns.Count; j++)

            {

                string strKey = dt.Columns[j].ColumnName;

                string strValue = drc[i][j].ToString();

                Type type = dt.Columns[j].DataType;

                jsonString.Append("\"" + strKey + "\":");

                strValue = StringFormat(strValue, type);

                if (j < dt.Columns.Count - 1)

                {

                    jsonString.Append(strValue + ",");

                }

                else

                {

                    jsonString.Append(strValue);

                }

            }

            jsonString.Append("},");

        }

        jsonString.Remove(jsonString.Length - 1, 1);

        jsonString.Append("]");

        return jsonString.ToString();

    }

    /// <summary>

    /// 格式化字符型、日期型、布尔型

    /// </summary>

    /// <param name="str"></param>

    /// <param name="type"></param>

    /// <returns></returns>

    private static string StringFormat(string str, Type type)

    {

        if (type == typeof(string))

        {

            str = String2Json(str);

            str = "\"" + str + "\"";

        }

        else if (type == typeof(DateTime))

        {

            str = "\"" + str + "\"";

        }

        else if (type == typeof(bool))

        {

            str = str.ToLower();

        }

        else if (type != typeof(string) && string.IsNullOrEmpty(str))

        {

            str = "\"" + str + "\"";

        }

        return str;

    }

    /// <summary>

    /// 过滤特殊字符

    /// </summary>

    /// <param name="s">字符串</param>

    /// <returns>json字符串</returns>

    private static string String2Json(String s)

    {

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < s.Length; i++)

        {

            char c = s.ToCharArray()[i];

            switch (c)

            {

                case '\"':

                    sb.Append("\\\""); break;

                case '\\':

                    sb.Append("\\\\"); break;

                case '/':

                    sb.Append("\\/"); break;

                case '\b':

                    sb.Append("\\b"); break;

                case '\f':

                    sb.Append("\\f"); break;

                case '\n':

                    sb.Append("\\n"); break;

                case '\r':

                    sb.Append("\\r"); break;

                case '\t':

                    sb.Append("\\t"); break;

                default:

                    sb.Append(c); break;

            }

        }

        return sb.ToString();

    }

二、

 public static string CreateJsonParameters(DataTable dt)

        {

            /**//**/

            /**//* /****************************************************************************

          * Without goingin to the depth of the functioning of this Method, i will try to give an overview

          * As soon as this method gets a DataTable it starts to convert it into JSON String,

          * it takes each row and in each row it grabs the cell name and its data.

          * This kind of JSON is very usefull when developer have to have Column name of the .

          * Values Can be Access on clien in this way. OBJ.HEAD[0].<ColumnName>

          * NOTE: One negative point. by this method user will not be able to call any cell by its index.

         * *************************************************************************/

            StringBuilder JsonString = new StringBuilder();

            //Exception Handling        

            if (dt != null && dt.Rows.Count > 0)

            {

                JsonString.Append("{ ");

                JsonString.Append("\"T_blog\":[ ");

                for (int i = 0; i < dt.Rows.Count; i++)

                {

                    JsonString.Append("{ ");

                    for (int j = 0; j < dt.Columns.Count; j++)

                    {

                        if (j < dt.Columns.Count - 1)

                        {

                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");

                        }

                        else if (j == dt.Columns.Count - 1)

                        {

                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");

                        }

                    }

                    /**//**/

                    /**//*end Of String*/

                    if (i == dt.Rows.Count - 1)

                    {

                        JsonString.Append("} ");

                    }

                    else

                    {

                        JsonString.Append("}, ");

                    }

                }

                JsonString.Append("]}");

                return JsonString.ToString();

            }

            else

            {

                return null;

            }

        }

 

 效果:
{"T_blog":
  [
   {"id":"14","title":"深圳市盈基实为有限公司","addtime":"2008-08-08"},
   {"id":"15","title":"文立商行","addtime":"2008-09-12"},
   {"id":"17","title":"邓事文","addtime":"2008-09-19"},
   {"id":"21","title":"深圳地铁通了","addtime":"2008-09-25"}
  ]
}

 

 三、

/// <summary>

    /// 将一个数据表转换成一个JSON字符串,在客户端可以直接转换成二维数组。

    /// </summary>

    /// <param name="source">需要转换的表。</param>

    /// <returns></returns>

    public static string DataTableToJson(DataTable source)

    {

        if (source.Rows.Count == 0)

            return "";

        StringBuilder sb = new StringBuilder("[");

        foreach (DataRow row in source.Rows)

        {

            sb.Append("[");

            for (int i = 0; i < source.Columns.Count; i++)

            {

                sb.Append('"' + row[i].ToString() + "\",");

            }

            sb.Remove(sb.Length - 1, 1);

            sb.Append("],");

        }

        sb.Remove(sb.Length - 1, 1);

        sb.Append("]");

        return sb.ToString();

    }



    /// <summary>

    /// 反回JSON数据到前台

    /// </summary>

    /// <param name="dt">数据表</param>

    /// <returns>JSON字符串</returns>

    public string CreateJsonParameters(DataTable dt)

    {

        StringBuilder JsonString = new StringBuilder();

        //Exception Handling        

        if (dt != null && dt.Rows.Count > 0)

        {

            JsonString.Append("{ ");

            JsonString.Append("\"TableInfo\":[ ");

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                JsonString.Append("{ ");

                for (int j = 0; j < dt.Columns.Count; j++)

                {

                    if (j < dt.Columns.Count - 1)

                    {

                        JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");

                    }

                    else if (j == dt.Columns.Count - 1)

                    {

                        JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");

                    }

                }

                /**/

                /*end Of String*/

                if (i == dt.Rows.Count - 1)

                {

                    JsonString.Append("} ");

                }

                else

                {

                    JsonString.Append("}, ");

                }

            }

            JsonString.Append("]}");

            return JsonString.ToString();

        }

        else

        {

            return null;

        }

    }


四、

public class DataTableConvertJson

    {

        #region dataTable转换成Json格式

        /// <summary>  

        /// dataTable转换成Json格式  

        /// </summary>  

        /// <param name="dt"></param>  

        /// <returns></returns>  

        public static string DataTable2Json(DataTable dt)

        {

            StringBuilder jsonBuilder = new StringBuilder();

            jsonBuilder.Append("{\"");

            jsonBuilder.Append(dt.TableName);

            jsonBuilder.Append("\":[");

            jsonBuilder.Append("[");

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                jsonBuilder.Append("{");

                for (int j = 0; j < dt.Columns.Count; j++)

                {

                    jsonBuilder.Append("\"");

                    jsonBuilder.Append(dt.Columns[j].ColumnName);

                    jsonBuilder.Append("\":\"");

                    jsonBuilder.Append(dt.Rows[i][j].ToString());

                    jsonBuilder.Append("\",");

                }

                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

                jsonBuilder.Append("},");

            }

            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

            jsonBuilder.Append("]");

            jsonBuilder.Append("}");

            return jsonBuilder.ToString();

        }

        #endregion dataTable转换成Json格式

        #region DataSet转换成Json格式

        /// <summary>  

        /// DataSet转换成Json格式  

        /// </summary>  

        /// <param name="ds">DataSet</param> 

        /// <returns></returns>  

        public static string Dataset2Json(DataSet ds)

        {

            StringBuilder json = new StringBuilder();

            foreach (DataTable dt in ds.Tables)

            {

                json.Append("{\"");

                json.Append(dt.TableName);

                json.Append("\":");

                json.Append(DataTable2Json(dt));

                json.Append("}");

            } return json.ToString();

        }

        #endregion

        /// <summary>

        /// Msdn

        /// </summary>

        /// <param name="jsonName"></param>

        /// <param name="dt"></param>

        /// <returns></returns>

        public static string DataTableToJson(string jsonName, DataTable dt)

        {

            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();

        }

    }

五、

#region  DataTable 转换为Json字符串实例方法

/// <summary>

/// GetClassTypeJosn 的摘要说明

/// </summary>

public class GetClassTypeJosn : IHttpHandler

{

    /// <summary>

    /// 文件名:DataTable 和Json 字符串互转

    /// 版权所有:Copyright (C) Create Family Wealth liangjw

    /// 创建标示:2013-08-03

    /// </summary> 

    //用法说明实例

     public void ProcessRequest(HttpContext context)

    {

        context.Response.ContentType = "application/json";

        context.Response.Charset = "utf-8";

        HttpRequest req = context.Request;

        string method = req["method"].ToStr().ToLower();



       //获取合同明细列表  DataTable 转换为Json字符串

        if (method == "txtdate")

        {

            string json = "";

            BO.MakeContractMx bll = new MakeContractMx();

            DataSet ds = bll.GetDataTable();

            if (ds.Tables.Count > 0)

            {

                json =ToJson(ds.Tables[0]);

            }

            context.Response.Write(json);

            return;

        }

    }

   public bool IsReusable

    {

        get

        {

            return false;

        }

    }

}

   #endregion

    #region Json字符串转换为DataTable 实例方法

    public DataTable JsonToDataTable(json)

    {

       DataTable  dt= ToDataTable(json);

         return dt;

    }



   #endregion

    #region DataTable 转换为Json 字符串

    /// <summary>

    /// DataTable 对象 转换为Json 字符串

    /// </summary>

    /// <param name="dt"></param>

    /// <returns></returns>

    public static string ToJson(this DataTable dt)

    {

        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();

        javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值

        ArrayList arrayList = new ArrayList();

        foreach (DataRow dataRow in dt.Rows)

        {

            Dictionary<string, object> dictionary = new Dictionary<string, object>();  //实例化一个参数集合

            foreach (DataColumn dataColumn in dt.Columns)

            {

                dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToStr());

            }

            arrayList.Add(dictionary); //ArrayList集合中添加键值

        }

        return javaScriptSerializer.Serialize(arrayList);  //返回一个json字符串

    }

    #endregion

    #region Json 字符串 转换为 DataTable数据集合

    /// <summary>

    /// Json 字符串 转换为 DataTable数据集合

    /// </summary>

    /// <param name="json"></param>

    /// <returns></returns>

    public static DataTable ToDataTable(this string json)

    {

        DataTable dataTable = new DataTable();  //实例化

        DataTable result;

        try

        {

            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();

            javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值

            ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);

            if (arrayList.Count > 0)

            {

                foreach (Dictionary<string, object> dictionary in arrayList)

                {

                    if (dictionary.Keys.Count<string>() == 0)

                    {

                        result = dataTable;

                        return result;

                    }

                    if (dataTable.Columns.Count == 0)

                    {

                        foreach (string current in dictionary.Keys)

                        {

                            dataTable.Columns.Add(current, dictionary[current].GetType());

                        }

                    }

                    DataRow dataRow = dataTable.NewRow();

                    foreach (string current in dictionary.Keys)

                    {

                        dataRow[current] = dictionary[current];

                    }

                    dataTable.Rows.Add(dataRow); //循环添加行到DataTable中

                }

            }

        }

        catch

        {

        }

        result = dataTable;

        return result;

    }

    #endregion

    #region 转换为string字符串类型

    /// <summary>

    ///  转换为string字符串类型

    /// </summary>

    /// <param name="s">获取需要转换的值</param>

    /// <param name="format">需要格式化的位数</param>

    /// <returns>返回一个新的字符串</returns>

    public static string ToStr(this object s, string format = "")

    {

        string result = "";

        try

        {

            if (format == "")

            {

                result = s.ToString();

            }

            else

            {

                result = string.Format("{0:" + format + "}", s);

            }

        }

        catch

        {

        }

        return result;

    }

   #endregion

 

 

 

 

http://www.jb51.net/article/49116.htm

 

你可能感兴趣的:(Datatable)