如何从C#对象的Dynamic View中获取动态成员及成员值?
嘿,我来帮你搞定这个问题!你已经通过查询拿到了buyingCompanies数组,现在要提取里面的动态成员和对应的值,有几种实用的方法,我给你一步步讲清楚:
方法1:直接用
dynamic类型访问(已知成员名称时) 如果已经知道要提取的动态成员名称,直接把数组元素转成dynamic类型就能快速访问值,非常直观:
foreach (var item in buyingCompanies) { dynamic dynamicCompany = item; // 直接访问已知的动态成员,比如你的u_seller_id string sellerId = dynamicCompany.u_seller_id; Console.WriteLine($"卖家ID: {sellerId}"); // 如果你还想看看其他所有动态成员,可以结合反射遍历 var allProperties = dynamicCompany.GetType().GetProperties(); foreach (var prop in allProperties) { string memberName = prop.Name; object memberValue = prop.GetValue(dynamicCompany); Console.WriteLine($"动态成员: {memberName}, 值: {memberValue}"); } }
方法2:用反射遍历所有动态成员(未知成员名称时)
如果不确定有哪些动态成员,反射是通用解决方案——它能获取对象的所有公共属性(包括动态生成的),不管你有没有提前知道成员名称:
using System.Reflection; // 遍历buyingCompanies里的每个对象 foreach (var company in buyingCompanies) { Type companyType = company.GetType(); // 获取所有实例级别的公共属性 PropertyInfo[] properties = companyType.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in properties) { string memberName = prop.Name; object memberValue = prop.GetValue(company); // 这里可以根据业务需求处理,比如存入字典、打印等 Console.WriteLine($"成员名称: {memberName}, 对应值: {memberValue}"); } }
方法3:针对
ExpandoObject的特殊处理(如果适用) 如果你的动态视图对象本质是ExpandoObject(有些ORM或动态框架会返回这种类型),可以直接转成IDictionary<string, object>来遍历,效率比反射更高:
foreach (var company in buyingCompanies) { if (company is ExpandoObject expandoCompany) { var memberDict = expandoCompany as IDictionary<string, object>; foreach (var kvp in memberDict) { Console.WriteLine($"成员: {kvp.Key}, 值: {kvp.Value}"); } } else { // 如果不是ExpandoObject,就 fallback 到反射方法 Type companyType = company.GetType(); var properties = companyType.GetProperties(); foreach (var prop in properties) { Console.WriteLine($"成员: {prop.Name}, 值: {prop.GetValue(company)}"); } } }
额外小提示
- 调试器里的「Dynamic View」有时候会展示一些系统内部属性,如果你只想提取业务相关的动态成员(比如你代码里的
u_前缀字段),可以在遍历的时候加个判断:if (prop.Name.StartsWith("u_")) - 如果你的
buyingCompanies其实是强类型对象,只是调试器显示了Dynamic View,上面的方法依然适用——反射能拿到所有公共属性。
内容的提问来源于stack exchange,提问作者user2571791
相关产品推荐
相关产品推荐

