使用反射给实体类的属性赋值(注:实体类属性包含其它实体类)
string strRequestValue = null;
PropertyInfo[] proInfo = Modules.GetType().GetProperties();
foreach (PropertyInfo p in proInfo)
{
if (p.PropertyType.IsClass)
{
PropertyInfo[] childProInfo = p.PropertyType.GetProperties();
foreach (PropertyInfo item in childProInfo)
{
strRequestValue = Request[p.Name + "." + item.Name];
if (strRequestValue != null)
{
item.SetValue(p, GetValue(strRequestValue, item), null);
}
}
}
…………
}
上面代码中Modules表示当前要赋值的实体类对象,比如这样一个实体类
public class EntityArticle
{
private EntityNode _node;
public EntityNode node
{
get { return _node; }
set { _node = value; }
}
private EntityNodeAttach _nodeAttach;
public EntityNodeAttach nodeAttach
{
get{return _nodeAttach;}
set{_nodeAttach = value;}
}
……
}
问题就出在:item.SetValue(p, GetValue(strRequestValue, item), null);
SetValue的第一个参数需要“设置其属性值得对象”,但是我不知道在这里如何得到这个属性对象
希望能有人指点一下,谢谢!
宝慕林4294392
浏览 919回答 6
6回答
-
桃花长相依
用 Activator.CreateInstance.
-
慕桂英546537
要实例化这个类
-
莫回无
关键代码在这,亲测可用,如果你还不行,联系我找我要测试代码
if (p.PropertyType.IsClass){ var type1 = p.PropertyType; var obj = Assembly.Load(type1.Assembly.FullName).CreateInstance(type1.FullName); var properties1 = type1.GetProperties(); foreach (var p1 in properties1) { p1.SetValue(obj, "111", null); } p.SetValue(t, obj, null);}
-
犯罪嫌疑人X
@Rich.T: 谢谢了,这种方式应该也可以,但我觉得使用Activator.CreateInstance(p.PropertyType)更好。
-
明月笑刀无情
你要实例化一个对象,然后才能给他的属性赋值。
怎么实例化我也不是很懂,如果出你的类有构造函数就要反射他的构造函数来实例化
打开App,查看更多内容