如何将列表转换为数据表

时间:2015-07-23 10:20:33

标签: c# json

我有一个从JSON文本

转换的课程

这是我的代码

   SearchResult myojb = (SearchResult)js.Deserialize(objText, typeof(SearchResult));

SearchResult类是

 public class SearchResult
    {
        public List<Datum> data { get; set; }
        public int page { get; set; }
        public int per_page { get; set; }
        public int total_count { get; set; }
        public string search_id { get; set; }
    }

DAtum类是

public class Datum
    {
        public string id { get; set; }
        public string description { get; set; }
        public string added_date { get; set; }
        public string media_type { get; set; }
        public Contributor contributor { get; set; }
        public string aspect { get; set; }
        public string image_type { get; set; }
        public bool is_editorial { get; set; }
        public bool is_adult { get; set; }
        public bool is_illustration { get; set; }
        public bool has_model_release { get; set; }
        public bool has_property_release { get; set; }
        public List<string> releases { get; set; }
        public List<Category> categories { get; set; }
        public List<string> keywords { get; set; }
        public Assets assets { get; set; }
        public List<Model> models { get; set; }
    }

我想将data类的列表SearchResult转换为datatable。 转换我正在使用https://stackoverflow.com/a/18100872回答。 但不明白如何使用列表data调用它。

请帮助解决这个问题。

3 个答案:

答案 0 :(得分:2)

  

我只想要一个只包含其中的行的数据表   List<Datum>

由于您已经拥有该方法,因此很简单:

DataTable tblDatum = ToDataTable(myobj.data)

答案 1 :(得分:0)

如果你已经从json获得了数据的searchresult。 根据您的Stackoverflow链接。将列表转换为datatable的代码如下:

public static DataTable ToDataTable<T>(List<T> items)
        {
            DataTable dataTable = new DataTable(typeof(T).Name);

            //Get all the properties
            PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in Props)
            {
                //Setting column names as Property names
                dataTable.Columns.Add(prop.Name);
            }
            foreach (T item in items)
            {
                var values = new object[Props.Length];
                for (int i = 0; i < Props.Length; i++)
                {
                    //inserting property values to datatable rows
                    values[i] = Props[i].GetValue(item, null);
                }
                dataTable.Rows.Add(values);
            }
            //put a breakpoint here and check datatable
            return dataTable;
        }

使用方法如下:

SearchResult myobj = (SearchResult)js.Deserialize(objText, typeof(SearchResult));
            if (myobj.data != null && myobj.data.Count > 0)
            {
                DataTable dt = ToDataTable(myobj.data);
                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow item in dt.Rows)
                    {
                        foreach (DataColumn dc in dt.Columns)
                        {
                            Console.WriteLine(item[dc]);
                        }

                    }
                }
            }

答案 2 :(得分:0)

YourList.CreateDataTable("NewNameForYourDataTable");

DataTable的名称是可选的,因此您也可以这样写:

YourList.CreateDataTable();