我想为动态对象/ expando对象运行时的属性添加属性,是否可能?
我想做的是:
dynamic myExpando = new ExpandoObject();
myExpando.SomeProp = "string";
myExpando.AddAttribute("SomeProp", new MyAttribute());
是否有可能以这种或那种方式做到这一点?
答案 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