我有一个从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
调用它。
请帮助解决这个问题。
答案 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();