C# 将json响应转换为datatable

C# 将json响应转换为datatable,c#,arrays,json,C#,Arrays,Json,我有一个来自API的json响应,我需要将该信息存储在一个数据表中。回答是这样的: { "columns": [ "firstName", "lastName", "email", "password", ], "rows": [ [ "Alpha", "Tango", "AlphaTango@domain.com", "123"

我有一个来自API的json响应,我需要将该信息存储在一个数据表中。回答是这样的:

{
    "columns": [ 
      "firstName", 
      "lastName", 
      "email", 
      "password",
    ],
    "rows": [
      [
        "Alpha",
        "Tango",
        "AlphaTango@domain.com",
        "123"
      ],
      [
        "Charle",
        "Tango",
        "CharlieTango@domain.com",
        "456"
      ]
    ]
}
我需要将其转换为以下格式:

firstName lastName email                   password
Alpha     Tango    AlphaTango@domain.com   123
Charle    Tango    CharlieTango@domain.com 456
JsonConvert.SerializeObject(new {
   columns = dt1.Columns.Cast<DataColumn>().Select(x => x.ColumnName),
   rows = dt1.AsEnumerable().Select(r => r.ItemArray),
});
我在下面代码段的帮助下做了相反的操作,但无法将json转换回数据表可接受的格式:

firstName lastName email                   password
Alpha     Tango    AlphaTango@domain.com   123
Charle    Tango    CharlieTango@domain.com 456
JsonConvert.SerializeObject(new {
   columns = dt1.Columns.Cast<DataColumn>().Select(x => x.ColumnName),
   rows = dt1.AsEnumerable().Select(r => r.ItemArray),
});
JsonConvert.SerializeObject(新){
columns=dt1.columns.Cast()。选择(x=>x.ColumnName),
rows=dt1.AsEnumerable().Select(r=>r.ItemArray),
});

如果您有任何建议或建议,我们将不胜感激。在这种情况下,您必须对json数据进行一些手动迭代。你能试试下面的代码吗

static void Main(string[] args)
{
    string json = "{\"columns\":[\"firstName\",\"lastName\",\"email\",\"password\",],\"rows\":[[\"Alpha\",\"Tango\",\"AlphaTango@domain.com\",\"123\"],[\"Charle\",\"Tango\",\"CharlieTango@domain.com\",\"456\"]]}";
    dynamic jObject = JObject.Parse(json);
    //Get columns of your object
    List<string> columns = JsonConvert.DeserializeObject<List<string>>(jObject.columns.ToString());
    //Get rows of your object
    List<string[]> rows = JsonConvert.DeserializeObject<List<string[]>>(jObject.rows.ToString());

    using (DataTable dt = new DataTable())
    {
        //Create columns
        foreach (string column in columns)
            dt.Columns.Add(new DataColumn(column));

        //Add rows
        foreach (string[] row in rows)
        {
            int columnOrdinal = 0;
            DataRow newRow = dt.NewRow();
            foreach (string value in row)
            {
                newRow.SetField<string>(columnOrdinal, value);
                columnOrdinal++;
            }
            dt.Rows.Add(newRow);
        }

    }
}
static void Main(字符串[]args)
{
字符串json=“{\'列\”:[\'firstName\,\'lastName\,\'email\,\'password\,],\'rows\:[[\'Alpha\,\'Tango\,\”AlphaTango@domain.com\“,\'123\'],[\'Charle\',\'Tango\',\”CharlieTango@domain.com\",\"456\"]]}";
动态jObject=jObject.Parse(json);
//获取对象的列
List columns=JsonConvert.DeserializeObject(jObject.columns.ToString());
//获取对象的行
List rows=JsonConvert.DeserializeObject(jObject.rows.ToString());
使用(DataTable dt=newdatatable())
{
//创建列
foreach(列中的字符串列)
添加(新数据列(列));
//添加行
foreach(行中的字符串[]行)
{
int columnOrdinal=0;
DataRow newRow=dt.newRow();
foreach(行中的字符串值)
{
设置字段(列序号,值);
columnOrdinal++;
}
dt.Rows.Add(newRow);
}
}
}
上述代码的结果:


希望这对你有所帮助

你可能会从那些只想获得声誉的人那里得到一些答案,但看起来你已经在这里呆了很长时间了,知道你应该尝试一下,并就你的代码出了什么问题提出具体的问题。