Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to add attributes to a property of dynamic object runtime?

I want to add an attribute to property of a dynamic object/expando object runtime, is it possible?

What I would like to do is:

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

Is it possible to do that in one way or another?

like image 553
Tomas Jansson Avatar asked Dec 11 '13 21:12

Tomas Jansson


1 Answers

You can add an attribute to a dynamic object like this:

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

To read the attributes you should use this:

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

I am not sure you can read custom attributes like that. However you can also try reflection:

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

However, with reflection you cannot see the attribute that you have been added because attributes are static metadata.

TypeDescriptor is a metadata engine provided by the .NET FCL. You can read the article here:

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

like image 123
Bura Chuhadar Avatar answered Oct 26 '22 23:10

Bura Chuhadar