Как я могу использовать 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
,