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

如何在C#中通用地将含嵌套属性的JSON转为DataTable用于CSV导出

在C#中通用转换带嵌套属性的JSON到DataTable

要实现将带嵌套属性的JSON转换为目标结构的DataTable,我们可以借助**Newtonsoft.Json(Json.NET)**的JObject来灵活遍历和解析JSON结构,核心思路是区分顶层属性的类型(嵌套对象/普通值),分别填充DataTable的行。

步骤说明

  1. 先定义DataTable的结构,包含Property、Value、Unit三列,其中Value列用object类型兼容任意值类型,Unit列允许为空。
  2. 将JSON字符串解析为JObject,遍历每个顶层属性。
  3. 对每个属性值进行判断:
    • 若为嵌套对象(JTokenType.Object),提取其Value和Unit属性值;
    • 若为普通值(如字符串、数字等),直接将值存入Value列,Unit列设为DBNull.Value。

完整代码示例

首先需要安装Newtonsoft.Json NuGet包:

Install-Package Newtonsoft.Json

转换方法代码:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Data;

public static class JsonConverterHelper
{
    public static DataTable ConvertNestedJsonToDataTable(string json)
    {
        // 初始化DataTable并定义列
        var dataTable = new DataTable();
        dataTable.Columns.Add("Property", typeof(string));
        dataTable.Columns.Add("Value", typeof(object));
        dataTable.Columns.Add("Unit", typeof(string));

        // 解析JSON为JObject
        var jsonObject = JObject.Parse(json);

        foreach (var property in jsonObject.Properties())
        {
            var row = dataTable.NewRow();
            row["Property"] = property.Name;

            if (property.Value.Type == JTokenType.Object)
            {
                // 处理嵌套结构,提取Value和Unit字段
                var nestedObject = (JObject)property.Value;
                row["Value"] = nestedObject["Value"]?.ToObject<object>();
                row["Unit"] = nestedObject["Unit"]?.ToObject<string>();
            }
            else
            {
                // 处理普通值类型,Unit列设为空
                row["Value"] = property.Value.ToObject<object>();
                row["Unit"] = DBNull.Value;
            }

            dataTable.Rows.Add(row);
        }

        return dataTable;
    }
}

使用示例

针对你提供的示例JSON,调用方法如下:

var sampleJson = @"
{
  ""Length"": {
    ""Value"": 12.93,
    ""Unit"": ""m""
  },
  ""Temperature"": {
    ""Value"": 28.32,
    ""Unit"": ""DegC""
  },
  ""Color"": ""Blue""
}";

DataTable resultTable = JsonConverterHelper.ConvertNestedJsonToDataTable(sampleJson);

// 后续可使用CsvHelper等库将DataTable导出为CSV文件

注意事项

  • 该方法支持任意类型的嵌套Value(包括double、int、自定义struct等),ToObject<object>会自动完成类型转换;
  • 如果嵌套对象存在其他额外属性,当前逻辑仅提取Value和Unit,如需扩展可修改嵌套对象的处理逻辑;
  • 非嵌套属性的Unit列会被设为DBNull.Value,导出CSV时会显示为空单元格,符合需求。

内容的提问来源于stack exchange,提问作者Francois Louw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:11:37