C#获取属性中的属性

时间:2013-10-24 10:03:26

标签: c# reflection

鉴于以下课程:

public class SampleViewModel
{
    public TheModel Model { get; set; }

    public SampleViewModel()
    {
        this.Model = new TheModel();
    }

    public class TheModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime Birthdate { get; set; }
    }
}

将其实例化为:

var svm = new SampleViewModel();

如何使用反射列出svm.Model中的属性?

注意:如果我在svm.Model上使用普通的GetProperties方法,我会得到14个属性,弹出各种属性信息字段,而不是TheModel类的所有属性。

注2:好的,试过这样的外部代码:

 var svm = new SampleViewModel();
 var props = typeof(SampleViewModel).GetProperties();
 var innerprops = svm.Model.GetType().GetProperties();

这似乎有效,现在我需要弄清楚为什么当我在我的框架内使用Activator.CreateInstance创建的实例时这样做不起作用。 :)

谢谢,pom

2 个答案:

答案 0 :(得分:1)

在SampleViewModel中获取属性Model的属性,需要调用:

typeof(SampleViewModel.TheModel).GetProperties();

svm.Model.GetType().GetProperties();

答案 1 :(得分:1)

PropertyInfo[] properties = svm.Model.GetType().GetProperties();
        foreach (PropertyInfo p in properties) 
            Console.WriteLine(p.Name);

输出

Name
Age
Birthdate

GetProperties()也适用于您看到的模型