C# 将json响应转换为datatable
我有一个来自API的json响应,我需要将该信息存储在一个数据表中。回答是这样的:C# 将json响应转换为datatable,c#,arrays,json,C#,Arrays,Json,我有一个来自API的json响应,我需要将该信息存储在一个数据表中。回答是这样的: { "columns": [ "firstName", "lastName", "email", "password", ], "rows": [ [ "Alpha", "Tango", "AlphaTango@domain.com", "123"
{
"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);
}
}
}
上述代码的结果:
希望这对你有所帮助你可能会从那些只想获得声誉的人那里得到一些答案,但看起来你已经在这里呆了很长时间了,知道你应该尝试一下,并就你的代码出了什么问题提出具体的问题。