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.

questionAnswers(1)

yourAnswerToTheQuestion