C #: Как инициализировать общий список с помощью отражения? - PullRequest
2 голосов
/ 01 декабря 2010

У меня есть список свойств объекта, считанных из файла 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 голосов
/ 01 декабря 2010

Если я правильно понимаю ваш вопрос, это должно произойти (employees и obj переменные из вашего кода):

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 для быстрого и простого способа создания объектов с использованием отражения.

0 голосов
/ 01 декабря 2010

Зачем использовать Reflection?

Это то, что XmlSerializer должен быть в состоянии обработать для вас.

LINQ to XML также возможна (особенно если вы пишете код в изменяющийся документ XML).Код, используемый для создания объекта из XML с LINQ to XML, лучше подходит для обработки изменений в формате XML.

Неважно ... LINQ to XML не поможет вам, если вы ориентируетесь на .NET 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...