È possibile aggiungere un attributo ad un oggetto dinamico come questo:
dynamic myExpando = new ExpandoObject();
myExpando.SomeProp = "string";
TypeDescriptor.AddAttributes(myExpando, new SerializableAttribute());
Per leggere gli attributi si dovrebbe usare questo:
dynamic values = TypeDescriptor.GetAttributes(myExpando);
for (int i = 0; i < values.Count; i++)
{
System.Console.WriteLine(values[i]);
}
Non sono sicuro che si può leggere attributi personalizzati come quello . Tuttavia si può anche provare riflessione:
System.Reflection.MemberInfo info = myExpando.GetType();
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i++)
{
System.Console.WriteLine(attributes[i]);
}
Tuttavia, con la riflessione non si può vedere l'attributo che sei stato aggiunto perché attributi sono metadati statici.
TypeDescriptor è un motore di metadati fornito da .NET FCL. Potete leggere l'articolo qui:
http://blogs.msdn.com/b/parthopdas/archive/2006/01/03/509103.aspx
fonte
2013-12-11 22:13:01
perché non si esegue il codice e vedere? –
Avete estratto 'TypeDescriptor'? http://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor%28v=vs.110%29.aspx – Matthew
@SamIam: non penso che si aspetti che funzioni, ma che sia esplicito , no. Non funziona. Il risultato è questo: 'RuntimeBinderException: 'System.Dynamic.ExpandoObject' non contiene una definizione per 'AddAttribute'' – recursive