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

如何在C#中利用反射获取List中嵌套模型的属性值?

解决C#反射嵌套模型属性取值问题

你当前的问题出在li.GetValue(item, null)这行代码:这里的item是PropertyInfo类型(描述属性的元数据),不是具体的对象实例,所以没法直接用它来获取子属性的值。

正确的做法是先从当前遍历的根对象(Data[i])中拿到嵌套属性的实例,再用这个实例去取子属性的值,具体修改如下:

在else if (GetTypeOfProp(item) == 2)的分支里,补充获取嵌套对象的逻辑并修正取值代码:

else if (GetTypeOfProp(item) == 2)
{
    int OldCol = Col;
    // 先从当前根对象Data[i]中取出嵌套属性的实例
    var nestedObj = item.GetValue(Data[i], null);
    foreach (var li in item.PropertyType.GetProperties())
    {
        worksheet.Range[GetCol(Col) + (Row + 1)].Text = li.Name;

        // 用嵌套对象实例获取子属性的值,处理null避免空引用异常
        var value = nestedObj != null ? li.GetValue(nestedObj, null) : null;
        // 可选:将值转为字符串写入单元格
        // worksheet.Range[GetCol(Col) + (Row + 1)].Text = (value ?? "").ToString();

        Col = Col + 1;
        MaxRecOfRow = 1;
    }

    worksheet.Range[$"{GetCol(OldCol) + Row}:{GetCol(Col - 1) + Row}"].Merge();
    worksheet.Range[$"{GetCol(OldCol) + Row}:{GetCol(Col - 1) + Row}"].Text = item.Name;
}

核心逻辑说明

  • item.GetValue(Data[i], null):从当前根模型实例Data[i]中提取嵌套属性的具体对象(比如根模型有Address属性,这里就拿到Data[i].Address的实例)。
  • 必须判断nestedObj是否为null,防止后续调用li.GetValue时抛出空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:18:31