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

C#如何修改RecordFactoryNew方法输出无Key/Value包装的dynamic对象

问题原因

原有代码的三个问题导致输出不符合预期:

  1. 行遍历逻辑中创建了List<KeyValuePair>类型的中间集合,而非单个动态对象,导致返回结构嵌套了键值对层
  2. ExpandoObject实例声明在循环外,会被所有行复用,最终所有行的属性都会被最后一行数据覆盖
  3. SetDateTimeKindUtc方法调用后没有接收返回值,处理逻辑未生效
修改后的代码
public static List<dynamic> RecordFactoryNew(IEnumerable<Property> columns, DataRowCollection dr) 
{
    List<dynamic> output = new List<dynamic>();

    for (int i = 0; i < dr.Count; i++) 
    {
        // 每行生成一个独立的动态对象,利用ExpandoObject实现的IDictionary接口赋值
        IDictionary<string, dynamic> rowData = new ExpandoObject();
        foreach (var col in columns)
        {
            // 接收时间处理后的返回值,若你的SetDateTimeKindUtc参数规则不同可自行调整
            var value = SetDateTimeKindUtc(columns, dr[i][col.Name]);
            rowData[col.Name] = value == DBNull.Value ? null : value;
        }
        output.Add(rowData);
    }
    return output;
}
适配说明
  • 返回类型保持List<dynamic>不变,适配列名、数据类型不固定的场景
  • 最终每个集合元素都是扁平结构的动态对象,可直接通过obj.Links、obj.ReportID的方式访问属性,序列化后就是你需要的{ Links: 'Test.com', ReportID: 21 }结构
  • 新增了DBNull的兼容处理,避免数据库空值抛出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:39:02