是否可以向动态对象运行时的属性添加属性?

时间:2013-12-11 21:19:23

标签: c#

我想为动态对象/ expando对象运行时的属性添加属性,是否可能?

我想做的是:

dynamic myExpando = new ExpandoObject();
myExpando.SomeProp = "string";
myExpando.AddAttribute("SomeProp", new MyAttribute());

是否有可能以这种或那种方式做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以向动态对象添加属性,如下所示:

 dynamic myExpando = new ExpandoObject();
            myExpando.SomeProp = "string";
            TypeDescriptor.AddAttributes(myExpando, new SerializableAttribute());

要阅读您应该使用的属性:

 dynamic values = TypeDescriptor.GetAttributes(myExpando);
            for (int i = 0; i < values.Count; i++)
            {
                System.Console.WriteLine(values[i]);
            }

我不确定你是否可以阅读这样的自定义属性。不过你也可以尝试反思:

 System.Reflection.MemberInfo info = myExpando.GetType();
            object[] attributes = info.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++)
            {
                System.Console.WriteLine(attributes[i]);
            }

但是,使用反射时,您无法看到已添加的属性,因为属性是静态元数据。

TypeDescriptor是.NET FCL提供的元数据引擎。你可以在这里阅读文章:

http://blogs.msdn.com/b/parthopdas/archive/2006/01/03/509103.aspx