Я столкнулся с проблемой, которую я не могу понять. Я уверен, что есть простое объяснение этому, но я не понимаю, почему я получаю System.Reflection.TargetException: «Объект не соответствует типу цели», когда я пытаюсь получить свойство (в данном случае) сотрудника объект.System.Reflection.TargetException on employee.GetType(). GetProperty (property.Name)
employee.GetType().GetProperty(property.Name)
В поисках ошибки возвращает много результатов с описанием проблем с вызовом методов Set/ПолучитьЗначением, но я не нашел решение этой.
Я установил точку останова, где выбрано исключение, и оно показывает, что property.Name действительно является значением и является реальным свойством объекта. Я также пытался вручную указать свойство, которое я знаю, существует. Все такой же.
Любые предложения?
EDIT: Пробовал следующие вместо:
Type type = typeof (Employee); //Throws the TargetException
PropertyInfo theProperty = type.GetProperty(property.Name);
А теперь то же самое исключение в первой строке выше вместо этого.
EDIT: Добавлен код и более подробная информация о приложении, которое я создаю.
Определение класса для сотрудника (для упрощения сопоставления с данными JSON этого класса «представляет», класс/поля в норвежском - что формат/язык данных приходит, извините :-).)
"Ansatt" = Сотрудник. «Ansattnummer» = EmployeeNo.
[JsonObject]
public class Ansatt
{
public int Ansattnummer { get; set; }
public string Fornavn { get; set; }
public string Etternavn { get; set; }
public int Pin { get; set; }
public string Adresse { get; set; }
public int Postnummer { get; set; }
public string Poststed { get; set; }
public int TlfPrivat { get; set; }
public int MobilTlf { get; set; }
public string EpostAdresse { get; set; }
public DateTime Fodt { get; set; }
}
Мое приложение получает заданный набор данных из веб-службы - это может быть сотрудники, проекты или несколько других возможных наборов данных. Какие данные для извлечения определяются во время выполнения - пользователем. Пользователь также может указать через URL-запрос, какие порции, например. столбцы, набора данных, который он/она хочет. Затем программа создает csv-файл с выбранными данными.
Вот код, я использую для этого:
if (records != null && records.Count != 0) //records contains the chosen dataset - in this case Employees (Ansatt).
{
if (records.GetType() == typeof (List<Ansatt>))
{
foreach (var model in records as List<Ansatt>)
{
var temp = new Ansatt();
foreach (var property in model.GetType().GetProperties())
{
var currentProperty = model.GetType().GetProperty(property.Name);
if (currentProperty != null)
{
Type type = typeof (Ansatt); //Throws System.Reflection.TargetException: 'Object does not match target type'
PropertyInfo tempProperty = type.GetProperty(property.Name);
tempProperty.SetValue(temp, currentProperty.GetValue(property.Name));
}
}
csv.WriteRecord(temp);
}
}
}
Что такое 'property.Name'? –
property.Name is int32 EmployeeNo – msk
.GetProperty() берет имя свойства как String, а не int32. –