首页 > 解决方案 > 在c#中将json转换为数据表

问题描述

{
  "data": [
        {
            "sheetname": "Sheet1",
            "datas": [
                {
                    "cloumn1": "6986",
                    "cloumn2": "1",
                    "cloumn3": "Server01"
                }
            ]
        },
        {
            "sheetname": "Sheet2",
            "datas": [
                {
                    "cloumn1": "6986",
                    "cloumn2": "1",
                    "cloumn3": "Server01"
                },
                {
                    "cloumn1": "6986",
                    "cloumn2": "1",
                    "cloumn3": "Server01"
                }
            ]
        }
    ]
}

如何将此json转换为数据表?
健康)状况:

  1. “数据”属性中的每个项目都应位于不同的选项卡中。(在上面的示例中,有 2 个项目,因此应创建 2 个工作表)
  2. 如果“数据”属性包含 1 个对象 --->1 行在 1 张表中
  3. 如果“数据”属性包含 2 个对象 --->1 张纸中的 2 行

标签: c#arraysjson.netdeserialization

解决方案


将您的 jsonstring 反序列化为某个类

List<User> UserList = JsonConvert.DeserializeObject<List<User>>(jsonString);

将以下扩展方法写入您的项目

public static DataTable ToDataTable<T>(this IList<T> data)
{
PropertyDescriptorCollection props =
TpeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for(int i = 0 ; i < props.Count ; i++)
{
    PropertyDescriptor prop = props[i];
    table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data)
{
    for (int i = 0; i < values.Length; i++)
    {
        values[i] = props[i].GetValue(item);
    }
    table.Rows.Add(values);
}
return table;        
}

电话扩展方法如

UserList.ToDataTable<User>();

这段代码取自这里:Convert JSON to DataTable


推荐阅读