序列化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
相关产品推荐
相关产品推荐

