动态对象上的PropertyInfo是System.Object不是想要的

时间:2014-09-16 15:27:24

标签: c# dynamic propertyinfo

我在运行时创建一个动态类型(请参阅这里:Serialize/Deserialize a dynamic object)并使用该类型在另一个类中创建动态成员。

    public class SomeClass
    {
        private dynamic _AnimalType = CreateAnimal<Animal>("Dog");
        public dynamic AnimalType { get { return _AnimalType; } }

        static internal PropertyInfo[] Sprops = typeof(SomeClass).GetProperties();
        static public PropertyInfo[] getPropertyInfos() { get { return Sprops; } }
    }

但是,当调用以下内容时:

        PropertyInfo[] Sprops = typeof(SomeClass).GetProperties();

Sprops包含一个PropertyInfo(System.Object),它是'exptected'但不是'想要'。我想获取AnimalType当前的类型(Animal,或更具体地Dog)。有没有办法实现这个目标?我不想创建这个类的实例,然后调用一些“SetInternalProperties”方法。我们的想法是将这些属性作为静态提供。

1 个答案:

答案 0 :(得分:2)

是的,PropertyInfo无法获取字段的运行时类型。它所做的就是获取声明属性的类型。

  

所以它应该是dynamic不是吗?你为什么这么做   System.Object

嗯,动态只是System.ObjectSystem.Runtime.CompilerServices.DynamicAttribute饰的封面下。这就是你看到System.Object的原因。无法获取运行时信息(没有实例)。

有没有办法实现这个目标?:如果你能解释一下你想要达到的目标,你可以得到更好的答案。

如果你有SomeClass的实例,你可以找到什么是运行时类型。

SomeClass instance = new SomeClass();// get instance somehow
PropertyInfo pi = ...;//Get the property info
Type dynamicType = pi.GetValue(instance).GetType();