评估动态属性

时间:2016-02-19 18:00:11

标签: c# .net dynamic

我有一个继承自IDynamicMetaObjectProvider的对象。当我在Visual Studio中进行调试时,Watch窗口会显示" Dynamic View"这需要扩大评估。

如何在代码中执行相同的操作 - 如何获取动态myThing并从中获取包含myThing中所有动态属性/值的对象或字典?

1 个答案:

答案 0 :(得分:1)

如果IDynamicMetaObjectProvider实现可以提供动态成员名称,则可以获取它们。

适用于ExpandoObjectsDynamicObjects以及提供IDynamicMetaObjectProvider实施的元对象的任何其他GetDynamicMemberNames()

试试这个:

var properties = new List<string>();
dynamic dynObject = new ExpandoObject();

dynObject.Prop1 = "property value 1";
dynObject.Prop2 = "property value 2";

var provider = dynObject as IDynamicMetaObjectProvider;

if (provider != null)
    properties.AddRange(provider.GetMetaObject(Expression.Constant(dynObject)).GetDynamicMemberNames());

foreach (var prop in properties)
{
    //do something
}