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

本文关键字:属性 对象 动态 何使用 FastMember 获取 | 更新日期: 2023-09-27 18:10:05

我有以下对象:

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
}

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

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

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

相关文章: