我需要从使用.NET 4中的dynamic关键字声明的对象中获取属性及其值的字典吗?似乎为此使用反射将不起作用。
例:
dynamic s = new ExpandoObject(); s.Path = "/Home"; s.Name = "Home"; // How do I enumerate the Path and Name properties and get their values? IDictionary<string, object> propertyValues = ???
如果IDynamicMetaObjectProvider可以提供动态成员名称,则可以获取它们。请参阅apache许可的PCL库Dynamitey(可以在nuget中找到)中的GetMemberNames实现,它适用于实现的s和s 以及任何其他提供了meta对象的实现而无需进行自定义测试的对象。ExpandoObject``DynamicObject``GetDynamicMemberNames``IDynamicMetaObjectProvider``GetDynamicMemberNames``is IDynamicMetaObjectProvider
ExpandoObject``DynamicObject``GetDynamicMemberNames``IDynamicMetaObjectProvider``GetDynamicMemberNames``is IDynamicMetaObjectProvider
在获得成员名称之后,要以正确的方式获得价值还需要做更多的工作,但是Impromptu可以做到这一点,但是要指出有趣的部分并使其有意义就更加困难了。这是文档,它等于或比反射更快,但是,它不可能比对expando的字典查找要快,但是它适用于任何对象,expando,动态或原始对象- 随便命名。