C#中将json字符串转化为DataTable,DataTable一直没加上数据

1.将json转化为dataTable,这里先将json字符串转为ArrayList集合,再遍历每个集合中的对象,用字典存储键值,再赋值给dataTable.但是dataTable一直都是空的。
2.代码:

json = "[{\"id\":\"329\",\"txt\":\"IT\"}, {\"id\":\"338\",\"txt\":\"机构2\"},{\"id\":\"888\",\"txt\":\"内部2\"}]";
DataTable dt = jsonToDataTable(json);

public static  DataTable jsonToDataTable(string json){
            DataTable dataTable = new DataTable();
            DataTable result = null;
            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);  //这里datarow都有值,但是datatable没加上
                    }
                }
            }
            catch { };
            result = dataTable;
            return result;
            
        }
阅读 10.8k
2 个回答

快下班了,粗一看,我记得DataTable添加完有一个保存的函数,否则,你result = Datatable,似乎指向的局部变量会释放掉添加的记录,这时候是添加在缓存的。回家再仔细看下

一句话的事情你搞的那么复杂,何必
关键问题还是你反序列化的方法不对,你讲JSON反序列化成ArrayList,导致的结果必然是["{"id":"329","txt":"IT"}", "{"id":"338","txt":"机构2"}","{"id":"888","txt":"内部2"}"]

故而在序列化完成之后的判断是没进的。

如果按照你的逻辑,至少也定义一个Model,反序列化成List<Model>这种形式

好好练练你的代码调试能力吧,一步步调试进去你就知道结果了。

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进