Jak dynamicznie uzyskać właściwość według nazwy z obiektu C # ExpandoObject?
mamExpandoObject
i chcesz zrobić dla niego gettera, który zwróci właściwość według nazwy w czasie wykonywania, gdzie nazwa jest podana w łańcuchu zamiast na stałe.
Na przykład mogę to zrobić:
account.features.isEmailEnabled;
i to zwróci prawdę.account
jestExpandoObject
, ifeatures
jest takżeExpandoObject
. Więc mamExpandoObject
który zawiera inneExpandoObjects
.
Chcę więc to zrobić:
account.features.GetProperty("isEmailEnabled");
i czy ten zwrot jest prawdziwy.
Powodem jest to, że mam wiele funkcji i chcę móc napisać jedną ogólną metodę gettera, w której mogę przekazać nazwę żądanej funkcji, a metoda zwróci mi wartość konta. gdzie „cokolwiek” jest określone przez przekazanie ciągu znaków do metody generycznego gettera). W przeciwnym razie będę musiał napisać 30-gettersów dla każdej funkcji.
Zrobiłem dużo badań i próbowałem zrobić coś takiego:
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
śledzony przez
var value = prop.GetProperty(featureNameAsString);
alevalue
zawsze wraca jako null. Nie rozumiem dlaczego. W oknie zegarka mogę to zrobićaccount.features.isEmailEnabled
i pokazuje prawdę i mówi, że jest boolean. Ale jeśli spróbuję uzyskać tę wartość używając powyższego podejścia i przekazaćisEmailEnabled
jakfeatureNameAsString
Po prostu się zepsułem.
Czy ktoś może mi powiedzieć, co robię źle i co jest dobrym podejściem, nie będąc zbyt skomplikowanym?
Pracuję z ASP.NET w ramach 4.5.1.