我正在尝试编写一种非常松散耦合的方法,将从数据库返回并存储在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)
,但也返回了null。任何帮助都将非常感谢,谢谢!
编辑:此处讨论的所有属性都是表单的自动属性:
public ComplexType theProperty { get; private set; }
答案 0 :(得分:1)
确保您的类构造函数首先创建子对象。