07-22-2023, 10:40 PM
I have an `ExpandoObject` and want to make a getter for it that will return a property by name at runtime, where the name is specified in a string instead of hardcoded.
For example, I CAN do this:
account.features.isEmailEnabled;
and that will return true. `account` is a `ExpandoObject`, and `features` is also an `ExpandoObject`. So I have an `ExpandoObject` that contains other `ExpandoObjects`.
So what I want to be able to do is this:
account.features.GetProperty("isEmailEnabled");
and have that return true.
The reason is that I have many features, and I want to be able to write one generic getter method where I can pass in the name of the feature I want, and the method will pass me back the value for account.features.whatever (where "whatever" is specified by passing in a string to the generic getter method). Otherwise I am going to have to write 30-some getters one for each feature.
I did a lot of research and tried doing something like:
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
followed by
var value = prop.GetProperty(featureNameAsString);
but `value` always comes back as null. I don't understand why. In the watch window I can do `account.features.isEmailEnabled` and it shows true and says its a boolean. But if I try to get at this value using the approach above and pass in `isEmailEnabled` as the `featureNameAsString` I just get null.
Can someone please tell me what I may be doing wrong and what's a good approach, without it being too complex?
I am working with ASP.NET under the 4.5.1 framework.
For example, I CAN do this:
account.features.isEmailEnabled;
and that will return true. `account` is a `ExpandoObject`, and `features` is also an `ExpandoObject`. So I have an `ExpandoObject` that contains other `ExpandoObjects`.
So what I want to be able to do is this:
account.features.GetProperty("isEmailEnabled");
and have that return true.
The reason is that I have many features, and I want to be able to write one generic getter method where I can pass in the name of the feature I want, and the method will pass me back the value for account.features.whatever (where "whatever" is specified by passing in a string to the generic getter method). Otherwise I am going to have to write 30-some getters one for each feature.
I did a lot of research and tried doing something like:
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
followed by
var value = prop.GetProperty(featureNameAsString);
but `value` always comes back as null. I don't understand why. In the watch window I can do `account.features.isEmailEnabled` and it shows true and says its a boolean. But if I try to get at this value using the approach above and pass in `isEmailEnabled` as the `featureNameAsString` I just get null.
Can someone please tell me what I may be doing wrong and what's a good approach, without it being too complex?
I am working with ASP.NET under the 4.5.1 framework.