获取动态对象的PropertyInfo

时间:2016-06-27 15:52:25

标签: c# dynamic reflection

我有一个库,它依赖于它接收的类的PropertyInfo(获取和设置值)进行大量的反射工作。

现在我希望能够使用动态对象,但是我找不到如何获取动态属性的PropertyInfo。我已经检查了替代方案,但对于那些我需要改变的地方,我使用PropertyInfo来获取/设置值。

dynamic entity = new ExpandoObject();
entity.MyID = 1;

// - Always null
PropertyInfo p = entity.GetType().GetProperty("MyID");
// - Always null
PropertyInfo[] ps = entity.GetType().GetProperties();

// - These are called everywhere in the code
object value = p.GetValue(entity);
p.SetValue(entity, value);

是否有可能以某种方式获取或创建PropertyInfo,以便能够在动态对象上使用它GetValue()SetValue()

1 个答案:

答案 0 :(得分:0)

在封面下,ExpandoObject实际上只是一本字典。您可以通过投射来获取字典。

dynamic entity = new ExpandoObject();
entity.MyID = 1;

if(entity.GetType() == typeof(ExpandoObject))
{
    Console.WriteLine("I'm dynamic, use the dictionary");
    var dictionary = (IDictionary<string, object>)entity;
}
else
{
    Console.WriteLine("Not dynamic, use reflection");
}

您可以修改Mapping方法以检查传入的对象是否是动态的,并通过不同的路径路由,该路径只是迭代字典的键。

https://dotnetfiddle.net/VQQZdy