C#:如何通过反射初始化通用列表?

时间:2010-12-01 01:45:07

标签: list reflection generics

我有一个从xml文件读取的对象属性列表,并希望通过反射(而不是xml序列化)创建对象。例如,我有一个属性

List<Employee> Employees { get; set; }

我想从以下xml文件初始化此列表:

<Employees>
  <Employee>
    <FirstName>John</FirstName>
    <LastName>Zak</LastName>
    <Age>20</Age>
  </Employee>
</Employees>

我可以动态创建Employees对象,例如

  Type employees = (type of Employees through reflection)
  object obj = Activator.CreateInstance(employees);

我的问题是如何填充员工列表?我想以通用的方式(没有强制转换为Employee)来使这个代码可以重用。

2 个答案:

答案 0 :(得分:0)

为什么要使用Reflection?

这是XmlSerializer能够为您处理的事情。

LINQ to XML也是一种可能性(特别是如果您正在编写一个不断变化的XML文档)。用于通过LINQ to XML从XML构造对象的代码更适合处理XML格式的更改。

没关系......如果您的目标是.NET 2.0,LINQ to XML将无法帮助您。

答案 1 :(得分:0)

如果我正确理解了您的问题,那么(employeesobj变量来自您的代码):

var employee = BuildEmployeeFromXml();
employees.GetMethod("Add").Invoke(obj, new[] {employee});
// repeat the above for as many employee objects you have
Console.WriteLine(list);

代码假定您已经知道如何在employee方法中从XML构建BuildEmployeeFromXml()对象。如果您不这样做,请参阅我的图书馆Fasterflect以获取快速和&amp;使用反射构造对象的简单方法。