zoukankan      html  css  js  c++  java
  • 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进行输出

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

  • 相关阅读:
    jquery 点击图片弹出遮罩层查看大图
    js 禁止复制粘贴
    如何设置ASP.NET页面的运行超时时间
    Asp.net中DataBinder.Eval用法的总结
    C#中DateTime的缺陷与代替品DateTimeOffset的对吧
    itextsharp html转成pdf 特殊符号异常处理
    C#中DateTime和DateTimeOffset的对比
    最新版本sublime text3注册码
    System.Web.Optimization找不到引用
    nodejs npm常用命令
  • 原文地址:https://www.cnblogs.com/jmoney/p/5689168.html
Copyright © 2011-2022 走看看