如何使用 FastMember 获取动态对象的属性?

How can I use FastMember to get the properties of a dynamic object?

我有以下对象:

dynamic person = new {Id = 1, Name = "SpiderMan"};

我需要能够遍历 属性 个名称,例如"Id", "Name".

我还需要能够以最有效的方式实现这一点,因此我选择使用 FastMember,但是 api 不允许我遍历属性。

有什么想法吗?

[更新]

感谢 Marc,我使用以下方法实现了我想要的:

dynamic person = new { Id = 1, Name = "SpiderMan" };
MemberSet members = TypeAccessor.Create(person.GetType()).GetMembers();
foreach (Member item in members)
{
    // do whatever
}

对于您展示的场景,TypeAccessor.Create(obj.GetType())GetMember() 应该可以正常工作,因为该类型适合反射。

在更一般的情况下:这是一个公平的问题 - 老实说,我不记得 FastMember 是否为真正的动态类型公开了这个,但这里的一个重要考虑是动态对象的本质, 属性集甚至可能无法枚举 - 即代码可以在事先不知道 Whatever 的情况下即时响应 obj.Whatever。然而,对于您实际拥有的对象,简单的反射是最好的选择。你展示的场景不需要dynamic.