DataTable或DataSet与JSON互转

 

  1. 通过AJAX异步减少网络内容传输,而JSON则可以把传输内容缩减到纯数据;然后利用jQuery内置的AJAX功能直接获得JSON格式的数据;在客户端直接绑定到数据控件里面,从而达到最优。  
  2.  
  3. #region dataTable转换成Json格式     
  4. /// <summary>     
  5. /// dataTable转换成Json格式     
  6. /// </summary>     
  7. /// <param name="dt"></param>     
  8. /// <returns></returns>     
  9. public static string DataTable2Json(DataTable dt)    
  10. {    
  11.     StringBuilder jsonBuilder = new StringBuilder();    
  12.     jsonBuilder.Append("{\"");    
  13.     jsonBuilder.Append(dt.TableName.ToString());    
  14.     jsonBuilder.Append("\":[");    
  15.     for (int i = 0; i < dt.Rows.Count; i++)    
  16.     {    
  17.         jsonBuilder.Append("{");    
  18.         for (int j = 0; j < dt.Columns.Count; j++)    
  19.         {    
  20.             jsonBuilder.Append("\"");    
  21.             jsonBuilder.Append(dt.Columns[j].ColumnName);    
  22.             jsonBuilder.Append("\":\"");    
  23.             jsonBuilder.Append(dt.Rows[i][j].ToString());    
  24.             jsonBuilder.Append("\",");    
  25.         }    
  26.         jsonBuilder.Remove(jsonBuilder.Length - 1, 1);    
  27.         jsonBuilder.Append("},");    
  28.     }    
  29.     jsonBuilder.Remove(jsonBuilder.Length - 1, 1);    
  30.     jsonBuilder.Append("]");    
  31.     jsonBuilder.Append("}");    
  32.     return jsonBuilder.ToString();    
  33. }    
  34.   
  35. #endregion dataTable转换成Json格式    
  36.   
  37. #region DataSet转换成Json格式     
  38. /// <summary>     
  39. /// DataSet转换成Json格式     
  40. /// </summary>     
  41. /// <param name="ds">DataSet</param>     
  42. /// <returns></returns>     
  43. public static string Dataset2Json(DataSet ds)    
  44. {    
  45.     StringBuilder json = new StringBuilder();    
  46.         
  47.     foreach (DataTable dt in ds.Tables)    
  48.     {    
  49.         json.Append("{\"");    
  50.         json.Append(dt.TableName);    
  51.         json.Append("\":");    
  52.         json.Append(DataTable2Json(dt));    
  53.         json.Append("}");    
  54.     }    
  55.     return json.ToString();    
  56. }    
  57. #endregion   

今天又发现了有更好的转换方法,具体如下 :

  1. public class ConventDataTableToJson  
  2.   
  3.    {  
  4.   
  5.          /// <summary>   
  6.   
  7.           /// 序列化方法(带分页)   
  8.           /// </summary>   
  9.   
  10.           /// <param name="dt"></param>   
  11.   
  12.          /// <returns></returns>   
  13.        public static string Serialize(DataTable dt)  
  14.   
  15.        {  
  16.   
  17.            List<Dictionary<stringobject>> list = new List<Dictionary<stringobject>>();  
  18.   
  19.            foreach (DataRow dr in dt.Rows)  
  20.   
  21.            {  
  22.   
  23.                Dictionary<stringobject> result = new Dictionary<stringobject>();  
  24.   
  25.                foreach (DataColumn dc in dt.Columns)  
  26.   
  27.                {  
  28.   
  29.                    result.Add(dc.ColumnName, dr[dc].ToString());  
  30.   
  31.                }  
  32.   
  33.                list.Add(result);  
  34.   
  35.            }  
  36.   
  37.            int count = 0;  
  38.   
  39.            try  
  40.   
  41.            {  
  42.   
  43.                count = Convert.ToInt32(dt.TableName);  
  44.   
  45.            }  
  46.   
  47.            catch (System.Exception ex)  
  48.   
  49.            {  
  50.   
  51.                count = dt.Rows.Count;  
  52.   
  53.            }  
  54.   
  55.            string strReturn = "";  
  56.   
  57.            if (count == 0)  
  58.   
  59.            {  
  60.   
  61.                strReturn = "{\"totalCount\":0,\"data\":[]}";  
  62.   
  63.            }  
  64.   
  65.            else  
  66.   
  67.            {  
  68.   
  69.                strReturn = ConventToJson(list, count);  
  70.   
  71.            }  
  72.   
  73.            return strReturn;  
  74.   
  75.        }  
  76.   
  77.   
  78.   
  79.        /// <summary>   
  80.   
  81.        /// 转换为JSON对象   
  82.        /// </summary>   
  83.   
  84.        /// <returns></returns>   
  85.   
  86.        public static string ConventToJson<T>(List<T> list, int count)  
  87.   
  88.        {  
  89.   
  90.            JavaScriptSerializer serializer = new JavaScriptSerializer();  
  91.   
  92.            string strJson = serializer.Serialize(list);  
  93.   
  94.            strJson = strJson.Substring(1);  
  95.   
  96.            strJson = strJson.Insert(0, "{totalCount:" + count + ",data:[");  
  97.   
  98.            strJson += "}";  
  99.   
  100.   
  101.   
  102.            return strJson;  
  103.   
  104.        }  
  105.   
  106.   
  107.   
  108.        /// <summary>   
  109.   
  110.        /// 不需要分页   
  111.        /// </summary>   
  112.   
  113.        /// <param name="dt"></param>   
  114.   
  115.        /// <param name="flag">false</param>   
  116.   
  117.        /// <returns></returns>   
  118.   
  119.        public static string Serialize(DataTable dt,bool flag)  
  120.   
  121.        {  
  122.   
  123.            JavaScriptSerializer serializer = new JavaScriptSerializer();  
  124.   
  125.            List<Dictionary<stringobject>> list = new List<Dictionary<stringobject>>();  
  126.   
  127.            foreach (DataRow dr in dt.Rows)  
  128.   
  129.            {  
  130.   
  131.                Dictionary<stringobject> result = new Dictionary<stringobject>();  
  132.   
  133.                foreach (DataColumn dc in dt.Columns)  
  134.   
  135.                {  
  136.   
  137.                    result.Add(dc.ColumnName, dr[dc].ToString());  
  138.   
  139.                }  
  140.   
  141.                list.Add(result);  
  142.   
  143.            }  
  144.   
  145.            return serializer.Serialize(list); ;  
  146.   
  147.        }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值