要转换为DataTable,您必须了解您在做什么:
DataTable 表示 rows 和 columns 的集合,您的 JSON 字符串必须表示可以通过转换为 rows 的集合的集合和列。
这是正确的 JSON 文件示例,可以更改为 DataTable:
[{
"column1": "1788",
"column2": "19"
},
{
"column1": "1789",
"column2": "24"
},
{
"column1": "1790",
"column2": "24"
},
{
"column1": "1790",
"column2": "23"
},
{
"column1": "1790",
"column2": "21"
}]
column1 和 column2 的每一对都是行
现在你的 JSON 不好。我将其更改为:(正确的DataTable 架构)
[{
"name": "apple.com",
"status": "regthroughothers",
"classkey": "domcno"
},
{
"name": "asdfgqwx.com",
"status": "available",
"classkey": "domcno"
},
{
"name": "microsoft.org",
"status": "unknown",
"classkey": ""
},
{
"name": "apple.org",
"status": "unknown",
"classkey": ""
},
{
"name": "microsoft.com",
"status": "regthroughothers",
"classkey": "domcno"
},
{
"name": "asdfgqwx.org",
"status": "unknown",
"classkey": "domcno"
}]
我在数组的开头和结尾添加[符号和]符号
下一步你可以这样做。这是将上述 JSON 字符串反序列化为 DataTable
的工作示例
using Newtonsoft.Json;
public class JsonExample
{
private string jsonObject = "[{ \"name\": \"apple.com\", \"status\": \"regthroughothers\", \"classkey\": \"domcno\"},{ \"name\": \"asdfgqwx.com\", \"status\": \"available\", \"classkey\": \"domcno\"},{ \"name\": \"microsoft.org\", \"status\": \"unknown\", \"classkey\": \"\"},{ \"name\": \"apple.org\", \"status\": \"unknown\", \"classkey\": \"\"},{ \"name\": \"microsoft.com\", \"status\": \"regthroughothers\", \"classkey\": \"domcno\"},{ \"name\": \"asdfgqwx.org\", \"status\": \"unknown\", \"classkey\": \"domcno\"}]".Trim();
public JsonExample()
{
DataTable items = JsonConvert.DeserializeObject<DataTable>(jsonObject);
foreach (DataRow item in items.Rows)
{
Console.WriteLine($"Name: {item[0]} Status: {item[1]} classkey {item[2]} " );
}
}
}
但是如果你不想更改 JSON 文件
private string jsonObject = JSON_String.Replace("{", "[{").Replace("}", "}]");
public JsonExample()
{
JArray jArray = JArray.Parse(jsonObject);
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("status");
dt.Columns.Add("classkey");
foreach (JProperty item in jArray[0])
{
var jArray2 = JArray.Parse(item.Value.ToString());
foreach (var item2 in jArray2)
{
dt.Rows.Add(item.Name, item2["status"], item2["classkey"]);
Console.WriteLine($"Name: {item.Name} Status: {item2["status"]} classkey {item2["classkey"]} ");
}
}
}
效果相同,但您不需要更改 JSON 字符串 exept 2 替换。
用我写的方法解析第一个字符串时的效果:
附加信息:
Convert JSON response to DataTable