Я пытаюсь написать очень слабосвязанный метод для сопоставления значений, возвращаемых из базы данных и сохраненных в DataTable
, со свойствами пользовательского объекта.Это прекрасно работает для всех свойств типа значения, но у меня возникают проблемы при настройке свойств объектов, которые сами являются свойствами основного класса.Вот что у меня есть:
protected void AssignDataRowToFields(DataRow data, object currentClass = null)
{
string strPrefix = currentClass == null ? string.Empty : currentClass.GetType().Name;
currentClass = currentClass ?? this;
PropertyInfo[] properties = currentClass.GetType().GetProperties();
foreach (PropertyInfo pi in properties)
{
if (pi.PropertyType.IsValueType || typeof(string).IsAssignableFrom(pi.PropertyType))
{
if (typeof(string).IsAssignableFrom(pi.PropertyType))
pi.SetValue(this, data[strPrefix + pi.Name].ToString(), null);
else if (typeof(int).IsAssignableFrom(pi.PropertyType))
pi.SetValue(this, int.Parse(data[strPrefix + pi.Name].ToString()), null);
}
else
this.AssignDataRowToFields(data, pi.GetValue(currentClass, null));
}
}
Последнее, где я рекурсивно вызываю AssignDataRowToFields
, всегда возвращает null
для pi.GetValue(currentClass, null)
.Я также попытался pi.GetGetMethod().Invoke(currentClass, null)
, но это также возвращает ноль.Спасибо за любую помощь, спасибо!
РЕДАКТИРОВАТЬ: Все рассматриваемые свойства являются автоматическими свойствами формы:
public ComplexType theProperty { get; private set; }