动态对象上的PropertyInfo是System.对象不是所需对象



我在运行时创建一个动态类型(请参阅此处的操作:序列化/反序列化动态对象),并使用该类型在另一个类中创建动态成员。

    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),它是"expected",但不是"wanted"。我想获得AnimalType当前的类型(Animal,或者更具体地说Dog)。有什么办法可以做到这一点吗?我不想创建这个类的实例,然后调用一些"SetInternalProperties"方法。其思想是使这些属性作为静态属性随时可用。

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

所以它应该是dynamic的东西,不是吗?你为什么System.Object

好吧,dynamic只是用System.Runtime.CompilerServices.DynamicAttribute装饰的封面下的System.Object。这就是为什么你只看到System.Object。无法获取运行时信息(没有实例)。

有什么方法可以做到这一点吗:若你们能解释一下你们正在努力实现的目标,你们可能会得到更好的答案。

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

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

相关内容

  • 没有找到相关文章

最新更新