C#控制台应用解析嵌套JSON并将数据展示到DataTable求助
解决方案
前置准备
- 安装常用JSON处理库
Newtonsoft.Json,控制台项目可通过包管理器控制台执行命令:Install-Package Newtonsoft.Json,或使用.NET CLI执行:dotnet add package Newtonsoft.Json
注意事项
你提供的JSON片段不完整,末尾PR字段无对应值,请先确保实际使用的JSON结构完整合法,以下为补全后的参考JSON结构:
{ "RLC": [ { "PAR": "测试值1" }, { "PAR": "测试值2" }, { "PAR": "测试值3" } ], "PR": "PR属性值" }
两种实现方案
方案A:无实体类直接转DataTable(适合JSON结构灵活的场景)
不需要预先定义实体类,直接解析JSON节点转DataTable,代码如下:
using System; using System.Data; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace JsonToDataTableDemo { class Program { static void Main(string[] args) { // 替换为实际的JSON字符串 string jsonStr = @" { ""RLC"": [ { ""PAR"": ""测试值1"" }, { ""PAR"": ""测试值2"" }, { ""PAR"": ""测试值3"" } ], ""PR"": ""测试PR值"" }"; // 解析JSON对象 JObject jsonObj = JObject.Parse(jsonStr); // 提取RLC数组节点转DataTable JArray rlcArray = (JArray)jsonObj["RLC"]; DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(rlcArray.ToString()); // 测试输出验证DataTable内容 Console.WriteLine("DataTable列名:"); foreach (DataColumn col in dataTable.Columns) { Console.Write(col.ColumnName + "\t"); } Console.WriteLine("\nDataTable行数据:"); foreach (DataRow row in dataTable.Rows) { Console.WriteLine(row["PAR"]); } } } }
方案B:先定义实体类再转DataTable(适合结构固定、需后续业务处理的场景)
第一步:定义对应实体类
using System.Collections.Generic; // 根节点实体 public class RootJson { public List<RlcItem> RLC { get; set; } // PR字段类型根据实际JSON值调整,如为数值可改为int/double public string PR { get; set; } } // RLC数组项实体 public class RlcItem { public string PAR { get; set; } }
第二步:转换代码
// 反序列化JSON为实体对象 RootJson root = JsonConvert.DeserializeObject<RootJson>(jsonStr); // 手动构建DataTable DataTable dt = new DataTable(); dt.Columns.Add("PAR", typeof(string)); foreach (var item in root.RLC) { DataRow newRow = dt.NewRow(); newRow["PAR"] = item.PAR; dt.Rows.Add(newRow); }
扩展说明
- 方案A支持JSON字段动态新增,新增字段会自动生成DataTable对应列,无需修改代码
- 若需将PR等其他根节点字段也整合到DataTable中,可自行调整JObject遍历逻辑,补充列和行数据即可
内容的提问来源于stack exchange,提问作者demi con
相关产品推荐
相关产品推荐

