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

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

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进行输出

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

时间: 2024-10-05 10:24:13

c# 匿名对象增加动态属性的相关文章

C# 匿名对象 增加属性

dynamic data = new System.Dynamic.ExpandoObject(); IDictionary<string, object> dictionary = (IDictionary<string, object>)data; dictionary.Add("FirstName", "Bob"); dictionary.Add("LastName", "Smith"); dic

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

在new出匿名对象的函数内可以直接调用该匿名对象的属性取值. 可是在其它函数就无法调用匿名对象的属性或方法. 这时,我们可以通过c#的反射机制取值: 文章出处:https://www.cnblogs.com/aucy/p/9102915.html ====================================================== C# 匿名对象的序列化 在开发的时候,经常遇到对象的序列化,尤其是在和外部系统交互的时候.在调用其他接口获得数据的时候大多都是json字符串,

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

/* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, 而且可以增加自己的方法) }//相当于将 继承父类 和 new 的过程 写到了一起有某有!很方便有某有! */ class Outer{ int num; public Outer(){ num = 5; } class Inner{ int num; public Inner(){ num = 1

this/super/static/final/匿名对象/继承/抽象类/访问权限修饰符

1.this关键字的作用     1)调用本类中的属性;     2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用     3)表示当前对象; 2.匿名对象     直接new出来的对象,不创建变量名,且只能使用一次,通常作为方法的参数及返回值使用 3.继承     继承是面向对象的三大特征之一,通过关键字:extends实现,被继承的类称为父类(也称作基类/超类),实现继承的类称为子类(也称作派生类).     特点:     (1)通过继承,子类可以直接访

47 匿名对象

什么是匿名对象 没有名字的对象 匿名对象应用场景 调用方法  仅仅只调用一次的时候 那么匿名对象调用有什么好处呢? 节省代码 注意:调用多次的时候,不适合,匿名对象调用完毕就是垃圾 1 class Demo2_Phone{ 2 3 4 public static void main(String[] args) { 5 6 new Phone().sendMessage(); //匿名对象 7 } 8 } 9 10 class Phone{ 11 String brand; 12 int pri

匿名对象

(1)匿名对象分析:普通申明一个对象是这样的A a = new A();那么这个时候a就是类A的一个对象,这个对象名字就是a再来看下面一个例子:method(A a);整理method是一个方法,他需要传递一个对象来作为参数,那么这个时候有2种方法:方法1: A a =new A(); method (a);方法2: method (new A());(2)匿名对象详细:1,所谓的匿名对象就是比之前的对象少一个栈内存的引用关系.2,只使用一次的对象,称为匿名对象.3,匿名对象只在堆内存中开辟空间

C# JavascriptSerializer与匿名对象打造Json的完美工具

一:背景 在web项目中经常需要生成json数据,返回给前端ajax. 无论是ashx,还是WebMethod,可以人工的用字符串去拼接,最终得到json数据. 有没有更好的方法呢?我个人推荐使用JavascriptSerializer序列化匿名对象. 二:解决方案 引用 System.Web.Script.Serialization 完整代码 var result = new { UserName = u.Alias, Email = u.Email, Mobile = u.Mobile, O

java匿名对象_面向对象

class Student{ public void tell(){ System.out.println("Hello jikexueyuan"); } public void main{ Student stu=new Student(); stu.tell(); //匿名对象可以直接new 但是只能使用一次 new Student.tell(); } }

黑马程序员 11-OC匿名对象

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— 匿名变量:利用类创建一个对象的时候,没有将对象的地址交给一个指针变量保存,这样的对象称为匿名对象,即没有指针指向的对象. //匿名变量 1 #import <Foundation/Foundation.h> 2 //类的声明 3 @interface Car : NSObject 4 { 5 @public//表示允许外界指针间接访问对象的成员变量 6 int _speed;//速度 7 } 8 //方法