c# - 如何使用反射获取另一个对象内的对象列表
问题描述
使用反射,我可以获得所有数据类型的对象属性和值以及该对象内的对象。但是,如果该对象包含其他对象的列表,我将无法获取列表中的对象。该列表可以包含任何类型的对象。
private static void SaveObj(object obj) {
foreach (var prop in obj.GetType().GetProperties()) {
if (prop.PropertyType.Namespace == "Entities") { //It is an object
object obL = prop.GetValue(obj, null);
SaveObj(obj);
}
else if (prop.PropertyType.Name == "List`1") { //This is a list of objects
object obP = prop.GetValue(obj);
//obP has the list of objects, I can see the list in debug mode.
List<object> obL = (List<object>)prop.GetValue(obj, null);
//This line returns an exception!!
}
else {
columns += prop.Name.ToLower() + ", ";
values[i] = prop.GetValue(obj, null).ToString();
}
... // the code continues ...
}
}
返回的异常消息是:“无法转换 'System.Collections.Generic.List 1[Entities.OrderItem]' to type 'System.Collections.Generic.List
1[System.Object]' 类型的对象。”
有趣的是,我可以在 degu 模式下查看所有对象及其内容。在即时窗口中,我可以打印带有列表中所有对象的变量 obP 的内容,但是如何读取它们呢?
关于如何解决这个问题的任何想法?
解决方案
您可以尝试将其转换为IEnumerable
然后使用.Cast<object>().ToList()
如下所示:
IEnumerable obL = prop.GetValue(obj, null) as IEnumerable;
List<object> list = obL.Cast<object>().ToList();
推荐阅读
- sql - SQL Server:查看用户活动
- javascript - 如何调整数据表中每一列的大小?
- javascript - IE11 是否使用哈希表来优化 document.getElementById()?
- reactjs - 如何使用 moxios 测试异步功能?
- office365 - 微软团队。收不到频道信息
- c# - PowerPoint 互操作程序集缓慢问题
- mysql - Prestashop 1.7 - 更新成功执行但前端返回错误
- asp.net - 我无法从 Windows 托管的 Web API 上的 IIS 访问 wkhtmltopdf
- ios - 如何在 iOS 应用程序上接收连接的 WiFi 模块/路由器发送的数据?
- php - preg_match_all 在模式匹配之前和之后的特定长度