为了账号安全,请及时绑定邮箱和手机立即绑定

使用反射给实体类的属性赋值(注:实体类属性包含其它实体类)

使用反射给实体类的属性赋值(注:实体类属性包含其它实体类)

宝慕林4294392 2018-12-07 06:45:42
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的第一个参数需要“设置其属性值得对象”,但是我不知道在这里如何得到这个属性对象 希望能有人指点一下,谢谢!
查看完整描述

6 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

用 Activator.CreateInstance.
查看完整回答
反对 回复 2018-12-09
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

要实例化这个类
查看完整回答
反对 回复 2018-12-09
?
莫回无

TA贡献1865条经验 获得超7个赞

关键代码在这,亲测可用,如果你还不行,联系我找我要测试代码   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);}
查看完整回答
反对 回复 2018-12-09
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

@Rich.T: 谢谢了,这种方式应该也可以,但我觉得使用Activator.CreateInstance(p.PropertyType)更好。
查看完整回答
反对 回复 2018-12-09
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

你要实例化一个对象,然后才能给他的属性赋值。 怎么实例化我也不是很懂,如果出你的类有构造函数就要反射他的构造函数来实例化
查看完整回答
反对 回复 2018-12-09
  • 6 回答
  • 0 关注
  • 918 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信