DataTable或DataSet與JSON互轉

來源:互聯網
上載者:User
通過AJAX非同步減少網路內容傳輸,而JSON則可以把傳輸內容縮減到純資料;然後利用jQuery內建的AJAX功能直接獲得JSON格式的資料;在用戶端直接綁定到資料控制項裡面,從而達到最優。#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.ToString());      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 

今天又發現了有更好的轉換方法,具體如下 :

 public class ConventDataTableToJson    {          /// <summary>           /// 序列化方法(帶分頁)           /// </summary>           /// <param name="dt"></param>          /// <returns></returns>        public static string Serialize(DataTable dt)        {            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();            foreach (DataRow dr in dt.Rows)            {                Dictionary<string, object> result = new Dictionary<string, object>();                foreach (DataColumn dc in dt.Columns)                {                    result.Add(dc.ColumnName, dr[dc].ToString());                }                list.Add(result);            }            int count = 0;            try            {                count = Convert.ToInt32(dt.TableName);            }            catch (System.Exception ex)            {                count = dt.Rows.Count;            }            string strReturn = "";            if (count == 0)            {                strReturn = "{\"totalCount\":0,\"data\":[]}";            }            else            {                strReturn = ConventToJson(list, count);            }            return strReturn;        }         /// <summary>        /// 轉換為JSON對象        /// </summary>        /// <returns></returns>        public static string ConventToJson<T>(List<T> list, int count)        {            JavaScriptSerializer serializer = new JavaScriptSerializer();            string strJson = serializer.Serialize(list);            strJson = strJson.Substring(1);            strJson = strJson.Insert(0, "{totalCount:" + count + ",data:[");            strJson += "}";             return strJson;        }         /// <summary>        /// 不需要分頁        /// </summary>        /// <param name="dt"></param>        /// <param name="flag">false</param>        /// <returns></returns>        public static string Serialize(DataTable dt,bool flag)        {            JavaScriptSerializer serializer = new JavaScriptSerializer();            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();            foreach (DataRow dr in dt.Rows)            {                Dictionary<string, object> result = new Dictionary<string, object>();                foreach (DataColumn dc in dt.Columns)                {                    result.Add(dc.ColumnName, dr[dc].ToString());                }                list.Add(result);            }            return serializer.Serialize(list); ;        }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.