Как я могу использовать FastMember, чтобы получить свойства динамического объекта?

У меня есть следующий объект:

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

Мне нужно иметь возможность перебирать имена свойств, например "Id", "Name",

Мне также нужно быть в состоянии достичь этого наиболее эффективным способом, поэтому я решил использовать FastMember, но его API не позволяет мне перебирать свойства.

Есть идеи?

[ОБНОВИТЬ]

Благодаря Марку мне удалось добиться того, чего я хотел, используя:

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

1 ответ

Решение

Для сценария, который вы показываете, TypeAccessor.Create(obj.GetType()) а также GetMember() должно работать нормально, так как этот тип хорош для отражения.

В более общем случае: это справедливый вопрос - я, честно говоря, не могу вспомнить, предоставляет ли FastMember это для истинных динамических типов, но одно важное соображение здесь заключается в том, что по самой природе динамических объектов набор свойств может даже не быть перечисляемым - т.е. код может отвечать на obj.Whatever на лету, не зная о Whatever заблаговременно. Однако для объекта, который у вас есть, простое отражение - ваш лучший выбор. Сценарий, который вы показываете, не нужен dynamic,

Другие вопросы по тегам