我正在尝试弄清楚如何从我的 WebApi 控制器获取匿名返回值,它执行以下操作:
public IActionResult Get() {
using var db = DbDataContextFactory.Make();
return Ok(new {
feedTypes = db.GetStatisticsAllFeeds()
});
}
...
IDictionary<string, ExpandoObject> GetStatisticsAllFeeds(this DbDataContext db) {}
出于兴趣,我想调用 Controllers Get 并查看返回的数据,很简单吧?
如果我这样做:
... instantiate controller ...
IActionResult actionResult = sut.Get();
var okObjectResult = actionResult as OkObjectResult;
dynamic anon = okObjectResult.Value;
我可以看到 anon 对象在调试器中有一个名为“feedTypes”的字段
如果我这样做:
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);
}
我可以看到 anon 对象有一个 feedTypes 字段。
但如果我这样做
var ft = anon.feedTypes;
我得到了例外
System.Linq.Expressions.dll 中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理:“对象”不包含“feedTypes”的定义
我怎样才能到达实际领域,例如
IDictionary dict = anon.FeedTypes ...这里发生了什么?
TIA。