码迷,mamicode.com
首页 > Windows程序 > 详细

c# 匿名对象增加动态属性

时间:2016-07-20 19:12:24      阅读:2262      评论:0      收藏:0      [点我收藏+]

标签:

在开发过程中碰到了一个需求,需要动态创建对象及其动态属性。在尝试几种方法后,最后完成了需求,记录下过程,给园友参考下

1.动态创建对象一:匿名对象

object obj1 = new {Name = "金朝钱",Age="31",Birthday =DateTime.Now};

创建的匿名对象:

技术分享

问题1:无法动态映射对象属性

 技术分享

解决:使用反射的方式获取对象值

object obj1 = new {Name = "金朝钱",Age="31",Birthday =DateTime.Now};
Response.Write(string.Format("Name:{0}", obj1.GetType().GetProperty("Name").GetValue(obj1, null).ToString()));

输出结果

技术分享

问题2:无法动态创建对象属性

技术分享

 

2.使用动态对象创建方法二、动态对象 

dynamic obj2 = new System.Dynamic.ExpandoObject();
obj2.Name = "金朝钱";
obj2.Age = 31;
obj2.Birthday = DateTime.Now;
Response.Write(string.Format("Name:{0}", obj2.Name));

 创建的动态对象:

技术分享

输出结果:

技术分享

问题:还是不能动态增加对象

 

3.动态创建对象及其属性

技术分享

查看ExpandoObject的定义,发现其实质是一个Dictionary存放键值对,是否可以通过该方法来动态处理对象属性呢?

 

Dictionary<string, object> temp = new Dictionary<string, object>();
temp.Add("Name", "金朝钱");
temp["Age"] = 31;
temp["Birthday"] = DateTime.Now;

dynamic obj = new System.Dynamic.ExpandoObject();

foreach (KeyValuePair<string, object> item in temp)
{
((IDictionary<string, object>)obj).Add(item.Key, item.Value);
}

Response.Write(string.Format("Name:{0}", obj.GetType().GetProperty("name").GetValue(obj, null).ToString()));

 

 对象查看:

技术分享

输出:

 技术分享

输出是发生错误,不能用反射获取对象属性,经查,该对象的Field和Property全部都是null,那么我们和上面一样使用Dictionary进行输出

技术分享

 

终于搞定收工,有类似需要的朋友可以参考下。

 

c# 匿名对象增加动态属性

标签:

原文地址:http://www.cnblogs.com/jmoney/p/5689168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!