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

MaY*_*YaN 8 c# dynamic fastmember

我有以下对象:

dynamic person = new {Id = 1, Name = "SpiderMan"};
Run Code Online (Sandbox Code Playgroud)

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

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

有任何想法吗?

[UPDATE]

感谢Marc,我成功实现了我想要的用途:

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

Mar*_*ell 7

对于您显示的场景,TypeAccessor.Create(obj.GetType())并且GetMember()应该正常工作,因为该类型适用于反射.

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