我有一個ExpandoObject
並且想爲它創建一個getter,它將在運行時按名稱返回一個屬性,其中名稱是在字符串中指定的,而不是硬編碼。如何從C#ExpandoObject的名稱動態獲取屬性?
例如,我可以這樣做:
account.features.isEmailEnabled;
,並且將返回true。 account
是ExpandoObject
,並且features
也是ExpandoObject
。所以我有一個ExpandoObject
,其中包含其他ExpandoObjects
。
所以我希望能夠做的是:
account.features.GetProperty("isEmailEnabled");
,並有真正的回報。
原因是我有很多功能,我希望能夠編寫一個通用的getter方法,我可以傳入我想要的功能的名稱,並且該方法會將我的值傳回給帳戶。 features.whatever(其中「whatever」是通過將字符串傳遞給泛型getter方法來指定的)。否則,我將不得不爲每個功能編寫30個一組的getters。
我做了很多的研究,並試圖做這樣的事情:通過
var value = prop.GetProperty(featureNameAsString);
但value
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
其次總是回來爲空。我不明白爲什麼。在觀察窗口中,我可以做account.features.isEmailEnabled
,它顯示爲真,並說它是一個布爾值。但是,如果我嘗試使用上述方法得到此值,並通過isEmailEnabled
作爲featureNameAsString
,我只能得到空值。
有人可以告訴我我可能做錯了什麼,什麼是好方法,沒有太複雜?
我在4.5.1框架下使用ASP.NET。