2013-12-11 16 views
7

Voglio aggiungere un attributo alla proprietà di un oggetto dinamico/runtime expando object, è possibile?È possibile aggiungere attributi a una proprietà di runtime di oggetti dinamici?

Quello che vorrei fare è:

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

E 'possibile farlo in un modo o nell'altro?

+0

perché non si esegue il codice e vedere? –

+0

Avete estratto 'TypeDescriptor'? http://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor%28v=vs.110%29.aspx – Matthew

+0

@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

risposta

0

È 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

+4

Ma questo è l'aggiunta della proprietà al tipo e non alla proprietà. –

Problemi correlati