You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:09:01