废话不多说直接上代码
string s = "{\n \"Flag\": 1,\n \"Data\": [\n {\n \"id\": 37,\n \"pid\": \"105226\",\n \"PName\": \"韩友庆\",\n \"IName\": \"X线计算机体层(CT)平扫(1层-8层)\",\n \"CName\": \"超声五室\",\n \"Times\": \"10:00:00-14:00:00\",\n \"checkdate\": \"2023-07-12T00:00:00\"\n },\n {\n \"id\": 38,\n \"pid\": \"105219\",\n \"PName\": \"翟金花\",\n \"IName\": \"X线计算机体层(CT)平扫(1层-8层)\",\n \"CName\": \"超声五室\",\n \"Times\": \"10:00:00-14:00:00\",\n \"checkdate\": \"2023-07-12T00:00:00\"\n }\n ],\n \"Msg\": \"\"\n}";
JObject json = JObject.Parse(s);
JArray array = new JArray();
var d = json["Data"];
foreach(var a in d){
array.Add(a);
}
dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
亲测可用!
在这里和其他论坛的一些帖子中,我发现引用了这段代码,用于将 Json 对象转换为 DataTable:
DataTable dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
我无法让它工作。它总是抛出 JsonSerializationException。我错过了什么吗?
这是显示错误的简单示例:
JObject query = new JObject();
JObject results = new JObject();
results.Add("Name", "Blue Umbrella");
results.Add("Price", 100);
query.Add("results", results);
DataTable dt = (DataTable)JsonConvert.DeserializeObject(query.ToString(), (typeof(DataTable)));
我做错了什么?
最佳答案
使用类似的东西:
JArray array = new JArray();
{
JObject row = new JObject();
row.Add("Name", "Blue Umbrella");
row.Add("Price", 100);
array.Add(row);
}
{
JObject row = new JObject();
row.Add("Name", "Green Umbrella");
row.Add("Price", 200);
array.Add(row);
}
DataTable dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
“容器”必须是 JArray
。
下次您遇到类似问题时,正如@Dr 所建议的那样。 Wily 的,简单地尝试序列化一些东西:
var dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Price");
var row = dt.NewRow();
row["Name"] = "Blue Umbrella";
row["Price"] = 100;
dt.Rows.Add(row);
row = dt.NewRow();
row["Name"] = "Green Umbrella";
row["Price"] = 200;
dt.Rows.Add(row);
string serialized = JsonConvert.SerializeObject(dt);
并查看其格式:
[{"Name":"Blue Umbrella","Price":"100"},{"Name":"Green Umbrella","Price":"200"}]
关于c# - 将 Json 对象转换为 DataTable,我们在Stack Overflow上找到一个类似的问题: c# - Converting Json object to DataTable - Stack Overflow