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

序列化SQL查询数据时如何将LastUpdate后字段归入interview节点

实现思路

核心逻辑是先拿到LastUpdate列在DataTable中的顺序索引,遍历列的时候分两部分处理:LastUpdate及之前的字段直接存入结果字典,之后的字段统一整理为question+answer结构的数组归入interview节点,同时额外处理空值/空对象转换为空白字符串的需求。

完整修改后代码

List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
DataTable dt = new DataTable();
...

SqlDataAdapter adapt = new SqlDataAdapter();
adapt.Fill(dt);

// 获取LastUpdate列的顺序索引,以此为分界点
int lastUpdateIndex = dt.Columns["LastUpdate"].Ordinal;

Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
    row = new Dictionary<string, object>();
    List<Dictionary<string, object>> interviewList = new List<Dictionary<string, object>>();
    
    foreach (DataColumn col in dt.Columns)
    {
        // 处理DBNull空值
        object value = dr[col] == DBNull.Value ? "" : dr[col];
        // 处理空对象转空字符串(适配System.Text.Json的场景,用Newtonsoft的话改对应判断即可)
        if (value is JsonElement ele && ele.ValueKind == JsonValueKind.Object && !ele.EnumerateObject().Any())
        {
            value = "";
        }
        
        if (col.Ordinal <= lastUpdateIndex)
        {
            // 分界点之前的字段直接加入结果
            row.Add(col.ColumnName, value);
        }
        else
        {
            // 分界点之后的字段整理为问答结构加入数组
            interviewList.Add(new Dictionary<string, object>
            {
                {"question", col.ColumnName},
                {"answer", value}
            });
        }
    }
    // 把问答数组加入当前行
    row.Add("interview", interviewList);
    rows.Add(row);
}
return JsonSerializer.Serialize(rows);

补充说明

代码完全适配数据库列的原生顺序,后续如果调整LastUpdate之后的字段数量、名称,不需要修改逻辑就可以自动适配输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:15:02