DataTable ,XML和JSON相互转化


网上搜集的,保留下来了,有需要的拿去!
private
string DataTable2Xml(DataTable dt) { StringBuilder xmlBuilder = new StringBuilder(); xmlBuilder.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); xmlBuilder.Append("<documentElement>"); xmlBuilder.Append("<" + dt.TableName + ">"); for (int i = 0; i < dt.Rows.Count; i++) { //xmlBuilder.Append("<" + dt.TableName + ">"); for (int j = 0; j < dt.Columns.Count; j++) { xmlBuilder.Append("<" + dt.Columns[j].ColumnName + ">"); xmlBuilder.Append(dt.Rows[i][j].ToString()); xmlBuilder.Append("</" + dt.Columns[j].ColumnName + ">"); } //xmlBuilder.Append("</" + dt.TableName + ">"); } xmlBuilder.Append("</" + dt.TableName + ">"); xmlBuilder.Append("</documentElement>"); return xmlBuilder.ToString(); } private string DataTable2Json(DataTable dt,bool withTableName) { StringBuilder jsonBuilder = new StringBuilder(); if (withTableName) { 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("]"); if(withTableName)jsonBuilder.Append("}"); return jsonBuilder.ToString(); }
 #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

 

 

/// <summary>

        /// 将json转换为DataTable

        /// </summary>

        /// <param name="strJson">得到的json</param>

        /// <returns></returns>

        private DataTable JsonToDataTable(string strJson)

        {

            //转换json格式

            strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();

            //取出表名   

            var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);

            string strName = rg.Match(strJson).Value;

            DataTable tb = null;

            //去除表名   

            strJson = strJson.Substring(strJson.IndexOf("[") + 1);

            strJson = strJson.Substring(0, strJson.IndexOf("]"));



            //获取数据   

            rg = new Regex(@"(?<={)[^}]+(?=})");

            MatchCollection mc = rg.Matches(strJson);

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

            {

                string strRow = mc[i].Value;

                string[] strRows = strRow.Split('*');



                //创建表   

                if (tb == null)

                {

                    tb = new DataTable();

                    tb.TableName = strName;

                    foreach (string str in strRows)

                    {

                        var dc = new DataColumn();

                        string[] strCell = str.Split('#');



                        if (strCell[0].Substring(0, 1) == "\"")

                        {

                            int a = strCell[0].Length;

                            dc.ColumnName = strCell[0].Substring(1, a - 2);

                        }

                        else

                        {

                            dc.ColumnName = strCell[0];

                        }

                        tb.Columns.Add(dc);

                    }

                    tb.AcceptChanges();

                }



                //增加内容   

                DataRow dr = tb.NewRow();

                for (int r = 0; r < strRows.Length; r++)

                {

                    dr[r] = strRows[r].Split('#')[1].Trim().Replace("", ",").Replace("", ":").Replace("\"", "");

                }

                tb.Rows.Add(dr);

                tb.AcceptChanges();

            }



            return tb;

        }
public static DataTable JsonToDataTable(string strJson)

        {

            //取出表名  

            Regex rg = new Regex(@"(?<={)[^:]+(?=:/[)", RegexOptions.IgnoreCase);

            string strName = rg.Match(strJson).Value;

            DataTable tb = null;

            //去除表名  

            strJson = strJson.Substring(strJson.IndexOf("[") + 1);

            strJson = strJson.Substring(0, strJson.IndexOf("]"));



            //获取数据  

            rg = new Regex(@"(?<={)[^}]+(?=})");

            MatchCollection mc = rg.Matches(strJson);

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

            {

                string strRow = mc[i].Value;

                string[] strRows = strRow.Split(',');



                //创建表  

                if (tb == null)

                {

                    tb = new DataTable();

                    tb.TableName = strName;

                    foreach (string str in strRows)

                    {

                        DataColumn dc = new DataColumn();

                        string[] strCell = str.Split(':');

                        dc.ColumnName = strCell[0].ToString();

                        tb.Columns.Add(dc);

                    }

                    tb.AcceptChanges();

                }



                //增加内容  

                DataRow dr = tb.NewRow();

                for (int r = 0; r < strRows.Length; r++)

                {

                    dr[r] = strRows[r].Split(':')[1].Trim().Replace("", ",").Replace("", ":").Replace("/"", "");

                }

                tb.Rows.Add(dr);

                tb.AcceptChanges();

            }



            return tb;

        }



 

 

你可能感兴趣的:(Datatable)