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

在C#中从SQL表结果格式化指定结构JSON的技术问题

如何在C#中按指定列维度格式化SQL查询结果为JSON结构?

没问题,我来帮你完善这段代码,实现把SQL表的每一列单独转成数组的需求。下面是完整的实现方案,包含代码细节和关键说明:

完整实现代码

using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
// 如果用Newtonsoft.Json,需要添加这个引用(记得先装NuGet包)
// using Newtonsoft.Json;
// 如果用.NET Core/.NET 5+内置的System.Text.Json,用这个
// using System.Text.Json;

public string Test() {
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(conect)) {
        using (SqlCommand cmd = new SqlCommand("Select Name, col2, col3 from BASE.[dbo].[Orders_Date_to_Chart]() order by y desc", con)) {
            con.Open();
            // 用SqlDataAdapter把查询结果填充到DataTable
            using (SqlDataAdapter da = new SqlDataAdapter(cmd)) {
                da.Fill(dt);
            }
        }
    }

    // 构建按列分组的数组列表
    List<List<string>> columnArrays = new List<List<string>>();

    // 遍历DataTable的每一列
    foreach (DataColumn column in dt.Columns) {
        List<string> columnValues = new List<string>();
        foreach (DataRow row in dt.Rows) {
            // 处理DBNull的情况,避免ToString()报错
            string cellValue = row.IsNull(column) ? string.Empty : row[column].ToString();
            columnValues.Add(cellValue);
        }
        columnArrays.Add(columnValues);
    }

    // 序列化结果为JSON
    // 方式1:使用Newtonsoft.Json(传统.NET框架常用)
    // return JsonConvert.SerializeObject(columnArrays);

    // 方式2:使用.NET Core/.NET 5+内置的System.Text.Json
    return JsonSerializer.Serialize(columnArrays);
}

关键细节说明

  • 精准查询列:我把SQL语句改成了Select Name, col2, col3,避免查询多余列影响最终的JSON结构。
  • 处理空值:加入了row.IsNull(column)判断,防止数据库中DBNull值导致ToString()抛出异常。
  • 序列化选项:提供了两种序列化方式:
    • 如果是.NET Framework项目,推荐用Newtonsoft.Json(需要先通过NuGet包管理器安装);
    • 如果是.NET Core/.NET 5+项目,直接用内置的System.Text.Json即可,无需额外安装包。

最终输出效果

执行后会返回一个包含三个数组的JSON结构(完全匹配你需求的格式):

[["Name1","Name2","Name3"],["1","4","7"],["2","5","8"]]

如果需要单独输出每个数组的字符串,可以遍历columnArrays分别序列化后拼接,比如:

var individualArrays = columnArrays.Select(arr => JsonSerializer.Serialize(arr));
// 得到三个独立的数组字符串:"[\"Name1\",\"Name2\",\"Name3\"]"、"[\"1\",\"4\",\"7\"]"、"[\"2\",\"5\",\"8\"]"

注意事项

  • 确保conect变量是正确的数据库连接字符串;
  • 如果使用Newtonsoft.Json,记得在项目中安装对应的NuGet包;
  • 如果列是数值类型,ToString()会自动转为字符串形式,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Marcin Wolanski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:27:59