C# 反射动态给属性赋值

我一个实体有get和set方法我现在写一个方法,比如publicListsInfotranXML(stringxmlData){System.Xml.XmlDocumen... 我一个实体 有get和set方法
我现在写一个方法,比如
public ListsInfo tranXML(string xmlData){
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
xmldoc.LoadXml(xmlData);//加载xml
XmlNodeList list = xmldoc.SelectSingleNode("/rss").ChildNodes;
Record record = null;
ListInfo lists = new ListInfo();
List<Object> recordList = new List<Object>();
foreach (XmlNode xn in list)
{
//读取cmd节点
if (xn.Name.Equals("cmd"))
{
lists.Cmd = xn.InnerText;
}
}
}
我想把 if (xn.Name.Equals("cmd"))
{
lists.Cmd = xn.InnerText;
}这个判断改成动态的 lists.Cmd 是ListInfo类中的一个属性
我想通过xn.Name.Equals("变量")动态给ListInfo属性赋值
再java里面我做过 是可以实现的 但是C# 不太了解
有谁对这个比较了解的 请告诉下 谢谢了
展开
 我来答
帐号已注销
2011-12-08 · TA获得超过787个赞
知道小有建树答主
回答量:549
采纳率:0%
帮助的人:285万
展开全部
public static T PopulateEntityFromCollection<T>(T entity, IDataReader collection) where T : new()
{
//初始化 如果为null
if (entity == null)
{
entity = new T();
}
//得到类型
Type type = typeof(T);
//取得属性集合
PropertyInfo[] pi = type.GetProperties();
foreach (PropertyInfo item in pi)
{
//给属性赋值
if (collection[item.Name] != null)
{
item.SetValue(entity, Convert.ChangeType(collection[item.Name], item.PropertyType), null);
}
}
return entity;
}
你可以仿造我以前这个方法写
追问
能不能通过字符串 比如 我方法传递一个字符串 
然后通过传递进去的字符串 判断对象中是否存在该属性 如果存在就赋值
追答
属性名字在这里 collection[item.Name] 
所以如果要从给定的字符串里判断首先要看字符串的格式 然后截取出属性名字后比较就可以了
重典技术闲话
2011-12-08 · TA获得超过2173个赞
知道大有可为答主
回答量:2593
采纳率:0%
帮助的人:1158万
展开全部
1.我觉得你需要是一个“反序列化”,.NET已经很好的提供了,可以自己百度一下
2.如果一定要用反射,那么可以这样

var props=typeof(ListInfo).GetProperties();
ListInfo lists = new ListInfo();
List<Object> recordList = new List<Object>();
foreach (XmlNode xn in list)
{
var prop= props.First(c=>c.Name==xn.Name);//获取同名属性
if(prop!=null){//如果属性存在
prop.SetValue(lists ,xn.InnerText);//赋值****在这里需要考虑类型问题
}
}
}
追问
SetValue好像有三个参数吧
看来C#高深莫测啊 以前学到的都是皮毛而已
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式