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

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

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

创建的匿名对象:

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

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

object obj1 = new {Name = "金朝钱",Age="",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 = ;
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"] = ;
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# 匿名对象增加动态属性的更多相关文章

  1. C# 匿名对象 增加属性

    dynamic data = new System.Dynamic.ExpandoObject(); IDictionary<string, object> dictionary = (I ...

  2. C# - 匿名对象属性的赋值与取值

    在new出匿名对象的函数内可以直接调用该匿名对象的属性取值. 可是在其它函数就无法调用匿名对象的属性或方法. 这时,我们可以通过c#的反射机制取值: 文章出处:https://www.cnblogs. ...

  3. java匿名类和匿名对象及this的其他用法

    /* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, ...

  4. c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic

    比如有一个匿名对象,var  result =......Select( a=>new {  id=a.id, name=a.name});然后Object  obj =  result ;我怎 ...

  5. 当类型为dynamic的视图模型遭遇匿名对象

    当年在ASP.NET MVC 1.0时代我提到,在开发时最好将视图的Model定制为强类型的,这样可以充分利用静态检查功能进行排错.不过有人指出,这么做虽然易于静态检查,但是定义强类型的Model类型 ...

  6. 匿名对象 构造方法 重载 构造代码块 this 关键字

    一.匿名对象 1.匿名对象 :没有名字对象 2.匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值,无法获取属性值. 2.匿名对象永远都不可能事一个对象. 3.匿名对象的好处 : 书写简单. ...

  7. C# 匿名对象随笔

      最新更新请访问: http://denghejun.github.io   C#中匿名对象的一般写法是这样的: object o=new {Name="TestName"}; ...

  8. MongoDB学习笔记~以匿名对象做为查询参数,方便查询子对象

    回到目录 对于MongoDB的封装还在继续,对于不断追求简单的编程还在继续,对于喜欢代码的那么感觉,还在继续... 当你的mongo数据表里有子对象时,尤其是列表对象时,使用官方的驱动很是不爽,要记得 ...

  9. dynamic与匿名对象

    用dynamic接收匿名对象很方便,因为不需要去定义model了,但是也有一个弊端,就是匿名对象的作用范围是internal的,也就是只能存在于当前程序域,所以用dynimic跨程序域去接收一个匿名对 ...

随机推荐

  1. C++ 类的静态成员详细讲解[转]

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  2. AutoCAD 2007在win8.1安装出现——错误1606。无法访问网络位置Autodesk\AutoCAD2007\R17.0\chs\的解决

    环境win 8.1 64位,AutoCAD 2007 安装CAD2007,一开始安装就出错,提示:错误1606.无法访问网络位置Autodesk\AutoCAD2007\R17.0\chs\ 百度之后 ...

  3. 推荐系统之基于二部图的个性化推荐系统原理及C++实现

    1.引言 许多网站都喜欢让用户点击“喜欢/不喜欢”,“顶/反对”,也正是这种很简单的信息也可以利用起来对用户进行推荐!这里介绍一种基于网络结构的推荐系统! 由于推荐系统深深植根于互联网,用户与用户之间 ...

  4. vim编码相关配置

    主要与三个参数有有关 fileencoding 缩写:fenc 保存文件时所用的编码 set fenc 查看当前文件的编码 set fenc=utf-8 可以将当前文件转换为utf-8编码 filee ...

  5. wp8 在OnBackKeyPress事件中调用MessageBox.Show()崩溃

    今天写代码的时候遇到一个问题,在wp8中执行下面的代码后,弹出对话框后,停滞一段时间程序退出. protected override void OnBackKeyPress(CancelEventAr ...

  6. 在ASP.NET中支持断点续传下载大文件(ZT)

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag         客户端每次提交 ...

  7. Codeforces Beta Round #12 (Div 2 Only) D. Ball sort/map

    D. Ball Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/12/D D ...

  8. Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana 分块

    E. GukiZ and GukiZiana Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55 ...

  9. wordpress文章ID不连续显示问题的完美解决

    在最新版的 wordpress 系统中,依然存在着文章ID不连续显示的问题,也就是我们还没有上传多少文章,在数据库里的ID号已经很大了,也就是说如果我们的博客使用的是固定链接,那么在前台显示的ID相差 ...

  10. SICP 习题 (1.7) 解题总结

    SICP 习题 1.7 是对正文1.1.7节中的牛顿法求平方根的改进,改进部分是good-enough?过程. 原来的good-enough?是判断x和guess平方的差值是否小于0.001,这个过程 ...