如何将API返回的columns-rows结构JSON转换为DataTable?
解决方案:将特定结构JSON转换为DataTable
我明白你现在的困扰——已经搞定了DataTable转特定结构JSON的反向操作,却卡在了把JSON转回DataTable这一步。别担心,我们可以借助你之前用的Newtonsoft.Json(Json.NET)来实现这个正向转换,步骤很清晰:
步骤1:定义对应的数据结构(可选但更清晰)
首先,我们可以创建一个和JSON结构匹配的类,让反序列化过程更直观:
public class JsonTableModel { [JsonProperty("columns")] public List<string> ColumnNames { get; set; } [JsonProperty("rows")] public List<List<object>> RowData { get; set; } }
JsonProperty属性是为了和JSON里的键名严格对应,避免大小写或命名风格差异导致的解析问题。
步骤2:编写转换方法
接下来编写核心转换逻辑:先把JSON字符串反序列化成模型实例,再逐步构建DataTable:
using Newtonsoft.Json; using System.Data; using System.Collections.Generic; public static DataTable ConvertJsonToDataTable(string jsonString) { // 1. 反序列化JSON到模型 var jsonTable = JsonConvert.DeserializeObject<JsonTableModel>(jsonString); // 2. 创建空的DataTable var dataTable = new DataTable(); // 3. 添加列:遍历columns列表,逐个创建DataColumn foreach (var columnName in jsonTable.ColumnNames) { dataTable.Columns.Add(columnName); // 如果需要指定列的数据类型,可在这里调整,比如: // dataTable.Columns.Add(columnName, typeof(string)); } // 4. 添加行数据:遍历rows列表,把每一行的object数组转成DataRow foreach (var row in jsonTable.RowData) { var dataRow = dataTable.NewRow(); for (int i = 0; i < row.Count; i++) { dataRow[i] = row[i]; } dataTable.Rows.Add(dataRow); } return dataTable; }
步骤3:测试使用
用你提供的JSON测试这个方法:
string json = @" { ""columns"": [ ""firstName"", ""lastName"", ""email"", ""password"" ], ""rows"": [ [ ""Alpha"", ""Tango"", ""AlphaTango@domain.com"", ""123"" ], [ ""Charle"", ""Tango"", ""CharlieTango@domain.com"", ""456"" ] ] }"; DataTable resultTable = ConvertJsonToDataTable(json);
额外小技巧
如果不想创建额外的类,也可以直接用JObject解析JSON:
var jsonObj = JObject.Parse(jsonString); var columns = jsonObj["columns"].ToObject<List<string>>(); var rows = jsonObj["rows"].ToObject<List<List<object>>>(); // 后续构建DataTable的逻辑和上面一致
这样就能完美匹配你之前的反向转换逻辑,实现JSON到DataTable的正向转换啦!
内容的提问来源于stack exchange,提问作者NG.
相关产品推荐
相关产品推荐

