获取动态对象的属性info



我有一个库,该库正在做大量的反思工作,以依靠其接收到的类的属性(获取和设置值)。

现在,我希望能够与动态对象一起工作,但是我找不到如何获得动态属性的属性。我已经检查了替代方案,但是对于那些我需要更改的地方,我在任何地方使用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);

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

封面下的 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

最新更新