1. 程式人生 > WINDOWS開發 >C#常用方法——json轉DataTable集合

C#常用方法——json轉DataTable集合

方法一:

/// <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; }

方法2:

/// <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;
}

 

第一種方法使用過,正確

第二種方法結合Jobject使用過正確。