如何访问匿名类型的字段?

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

提问人:push 22 提问时间:6/3/2020 更新时间:6/3/2020 访问量:168

问:

我正在尝试弄清楚如何从我的 WebApi 控制器获取匿名返回值,它执行如下操作:

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

出于兴趣,我想调用控制器获取并查看返回的数据,很容易,对吧?

如果我这样做:

... 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.饲料类型 ...这里有什么?

TIA。

C# 匿名对象

评论

0赞 Pavel Anikhouski 6/3/2020
@RufusL看起来,OP已经在使用它了,依此类推Type type = anon.GetType()
0赞 Rufus L 6/3/2020
@PavelAnikhouski你是对的,我没有仔细阅读这个问题。
0赞 Rufus L 6/3/2020
您已经演示了如何从动态类型中获取属性值。这里的问题具体是什么?
1赞 sTrenat 6/4/2020
您不能将匿名类型转换为动态类型,但您可以做的是匿名。GetType() 中。GetProperty(“feedTypes”)。GetValue(佚名)
1赞 sTrenat 6/4/2020
你也可以试试 JObject.FromObject(anon)[“feedTypes”]

答: 暂无答案