如何将指定JSON字符串反序列化为DataTable?
解决JSON转DataTable的问题
你的JSON结构是单条嵌套对象,而直接用JsonConvert.DeserializeObject<DataTable>只能解析JSON数组(多条数据集合),所以原代码无法运行。下面是可行的处理方案:
步骤说明
- 先解析JSON到可操作的对象(用
JObject提取嵌套数据最方便) - 手动创建DataTable并定义所需列
- 从解析后的JSON中提取数据,填充到DataTable的行里
完整代码示例
using Newtonsoft.Json.Linq; using System.Data; // 你的JSON字符串 string json = @"{ ""data"": { ""id"": 33306, ""sport"": { ""id1"": ""FB"", ""id2"": ""HB"" } } }"; // 1. 解析JSON到JObject JObject jsonObj = JObject.Parse(json); JToken dataToken = jsonObj["data"]; // 2. 创建DataTable并定义列 DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(int)); dt.Columns.Add("sport_id1", typeof(string)); dt.Columns.Add("sport_id2", typeof(string)); // 3. 提取数据并添加到DataTable DataRow row = dt.NewRow(); row["id"] = dataToken["id"].Value<int>(); row["sport_id1"] = dataToken["sport"]["id1"].Value<string>(); row["sport_id2"] = dataToken["sport"]["id2"].Value<string>(); dt.Rows.Add(row);
补充说明
如果你的JSON后续会变成多条data对象的数组(比如{"data": [{}, {}, ...]}),可以循环遍历数组里的每个对象,重复上述填充行的操作即可。
内容的提问来源于stack exchange,提问作者Ole Engvoll
相关产品推荐
相关产品推荐

