【问题标题】:Converting Json object to DataTable将 Json 对象转换为 DataTable
【发布时间】:2018-09-14 21:01:08
【问题描述】:

在这里和其他论坛上的一些帖子中,我发现引用了这段代码,用于将 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)));

我做错了什么?

【问题讨论】:

  • 我会看看query.ToString() 生成的字符串值是什么,并将其与您看到的其他示例进行比较。
  • 为什么要转换成数据表?为什么不转换为POCO

标签: c# datatable json.net deserialization json-deserialization


【解决方案1】:

使用类似的东西:

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"}]

【讨论】:

  • 如何将此 json 字符串更改为 Datatable C# { "apple.com":{"status":"regthroughothers","classkey":"domcno"}, "asdfgqwx.com":{" status":"available","classkey":"domcno"}, "microsoft.org":{"status":"unknown"}, "apple.org":{"status":"unknown"}, "microsoft .com":{"status":"regthroughothers","classkey":"domcno"}, "asdfgqwx.org":{"status":"unknown"} }
  • @user3786581 我不认为你可以:键名 canges,"apple.com" 变为 "asdfgqwx.com" 变为 "microsoft.com" 更多的是 Dictionary&lt;string, MyStatusClass&gt;。这个问题很复杂,你应该问一个完整的问题。
  • 好的。这是我的完整问题link
猜你喜欢
  • 2023-02-20
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多