How do I get to a field of an anonymous type?

184 Views Asked by At

I'm trying to work out how to get to the anonymous return value from my WebApi Controller, it does something like this:

public IActionResult Get() {
    using var db = DbDataContextFactory.Make();
    return Ok(new {
        feedTypes = db.GetStatisticsAllFeeds()
    });
}
...
IDictionary<string, ExpandoObject> GetStatisticsAllFeeds(this DbDataContext db) {}

Out of interest I want to call the Controllers Get and look at the returned data, easy right?

If I do this this:

... instantiate controller ...
IActionResult actionResult = sut.Get();
var okObjectResult = actionResult as OkObjectResult;
dynamic anon = okObjectResult.Value;

I can see that the anon object has a field called 'feedTypes' in the debugger

If I do This:

Type type = anon.GetType();
var fields = type.GetProperties();
foreach (var field in fields) {
    string name = field.Name;
    var temp = field.GetValue(anon, null);
    Console.WriteLine(name + "  " + temp);
}

I can see the the anon object has a feedTypes field.

But if I do this

var ft = anon.feedTypes;

I get the exception

An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Linq.Expressions.dll but was not handled in user code: ''object' does not contain a definition for 'feedTypes''

How can I get to the actual field e.g.

IDictionary dict = anon.FeedTypes ... what goes here?

TIA.

0

There are 0 best solutions below