从API请求中获取JSON响应,如下所示。我想从这个JSON响应中创建一个数据表。如何使用C#.net应用程序从JSON响应中检索数据表?我是新手,所以请为我建议一个解决方案。
{
"status": "success",
"data": [
[
{
"value": "Department of Information Technology and Communication",
"key": "POSTED_DEPARTMENT"
},
{
"value": 5800002,
"key": "APPOINTING_DEPT_ID"
},
{
"value": 170,
"key": "EMP_CADRE"
},
{
"value": "Department of Information Technology and Communication",
"key": "APPOINTING_DEPT"
},
{
"value": "RJBI198009003722",
"key": "UNIQUE_ID"
},
{
"value": 5800002,
"key": "POSTED_DEPARTMENT_ID"
},
{
"value": 3004216,
"key": "EMP_ID"
},
{
"value": null,
"key": "DATE_OF_BIRTH"
},
{
"value": "06 Jan 2018",
"key": "IPR_SUBMITTED_DATE"
},
{
"value": "Programmer",
"key": "DESIGNATION"
},
{
"value": null,
"key": "PROPERTY_YEAR"
},
{
"value": "DINESHARORA",
"key": "EMPLOYEE_NAME"
},
{
"value": "Mr.MURLI MANOHAR ARORA",
"key": "FATHER_NAME"
},
]
],
"msg": "Data Successfully Retrived"
}
答案 0 :(得分:0)
我想这是将复杂的JSON响应转换为DataTable的正确方法。试试下面的内容。创建用于反序列化JSON数据的类
public class Example
{
public string status { get; set; }
public IList<IList<Datum>> data { get; set; }
public string msg { get; set; }
}
public class Datum
{
public object value { get; set; }
public string key { get; set; }
}
我选择示例JSON格式并尝试使用方法
上的代码string filter1 = "{\"status\": \"success\", \"data\": [[ {\"value\": \"RJBI198009003722\", \"key\": \"UNIQUE_ID\"}, {\"value\": 5800002, \"key\": \"POSTED_DEPARTMENT_ID\"},],[{\"value\": \"Department of Information Technology and Communication\", \"key\": \"POSTED_DEPARTMENT\" }] ],\"msg\":\"Data Successfully Retrived\"}";
var dat = JsonConvert.DeserializeObject<Example>(filter1);
var result = new List<Datum>();
foreach (var item in dat.data)
{
for (int i = 0; i < item.Count; i++)
{
result.Add(item[i]);
}
}
DataTable table = new DataTable();
table = ConvertToDataTable<Datum>(result);
以下是将任何列表对象转换为数据表的方法。
public static DataTable ConvertToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}
数据表格式如下所示。
谢谢!