在.NET8 Blazor项目中使用反射GetProperty访问公共属性遇阻
解决.NET8 Blazor反射访问公共属性返回null的问题
可能的原因及对应解决方案
1. 未显式指定绑定标志
Type.GetProperty(string) 默认查找公共实例属性,但部分场景(如类型含嵌套属性、框架生成代理类)下,需显式指定绑定标志才能精准匹配属性。
修改代码,添加绑定标志参数:
var property = type.GetProperty("Name", BindingFlags.Public | BindingFlags.Instance); if (property != null) { var name = property.GetValue(obj[i]); }
2. 对象实际类型并非MyClass
确认obj[i]的真实类型是否为你定义的MyClass,常见异常场景:
- 对象是
MyClass的子类,但子类未继承/重写Name属性 - 对象是ORM框架生成的动态代理类(如EF Core代理),可尝试获取基类属性:
var type = obj[i].GetType(); // 若为代理类,切换到基类类型 if (type.BaseType != typeof(object)) { type = type.BaseType; } var property = type.GetProperty("Name", BindingFlags.Public | BindingFlags.Instance);
- 可先打印类型全名验证:
Console.WriteLine(obj[i].GetType().FullName);
3. 属性名称大小写不匹配
C#对大小写敏感,检查GetProperty的参数与模型属性名称是否完全一致(如模型是Name,代码写name会直接返回null)。
4. 类型命名空间冲突
若项目存在多个同名MyClass(不同命名空间),需确认obj[i]的类型属于你期望的命名空间,可通过打印类型全名排查。
内容的提问来源于stack exchange,提问作者Chaos
相关产品推荐
相关产品推荐

