Ho un ExpandoObject
e voglio creare un getter per esso che restituirà una proprietà per nome in fase di esecuzione, dove il nome è specificato in una stringa anziché in codice.Come ottenere dinamicamente una proprietà per nome da un ExpandoObject C#?
Per esempio, posso fare questo:
account.features.isEmailEnabled;
e che restituirà true. account
è un ExpandoObject
e features
è anche un ExpandoObject
. Quindi ho uno ExpandoObject
che contiene altri ExpandoObjects
.
Quindi quello che voglio essere in grado di fare è questo:
account.features.GetProperty("isEmailEnabled");
e che hanno return true.
La ragione è che ho molte funzionalità e desidero essere in grado di scrivere un metodo generico getter in cui posso passare il nome della funzionalità che desidero e il metodo restituirà il valore dell'account. features.whatever (dove "qualunque cosa" è specificato passando una stringa al metodo generico getter). Altrimenti dovrò scrivere 30-alcuni getters uno per ogni funzione.
ho fatto un sacco di ricerche e provato a fare qualcosa di simile:
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
seguito da
var value = prop.GetProperty(featureNameAsString);
ma value
torna sempre come null. Non capisco perché. Nella finestra dell'orologio posso fare account.features.isEmailEnabled
e si mostra vero e dice che è un booleano. Ma se provo a ottenere questo valore usando l'approccio sopra e passo in isEmailEnabled
come il featureNameAsString
ottengo solo null.
Qualcuno può dirmi per favore cosa posso fare male e quale è un buon approccio, senza che sia troppo complesso?
Sto lavorando con ASP.NET nell'ambito del framework 4.5.1.