如何动态读取C#中的内部属性值?

如何动态读取C#中的内部属性值?,c#,C#,我有一个下面的物体 public class ResTemplate { public string country { get; set; } public int jobCode { get; set; } public Attributes attributes { get; set; } } public class Attributes { public string state { get; set; } public string regi

我有一个下面的物体

public class ResTemplate
{
    public string country { get; set; }
    public int jobCode { get; set; }
    public Attributes attributes { get; set; }
}

public class Attributes
{
    public string state { get; set; }
    public string region { get; set; }
}
现在我想将其转换为数据表,而不使用属性名读取值

预期产量

country  jobcode  state   region
US       001      IL      Chicago
为什么不试试呢

myObj.GetType().GetProperty("attributes ").GetType().GetProperty("state") 
然后只处理值

你也可以使用

PropertyInfo[] properties = myObj.GetType().GetProperties();
然后运行for循环,并使用以下命令访问其他属性及其值:
不动产[i]

stateValue
将为您提供所需的结果

var objectValue =  myObj.GetType().GetProperty("attributes").GetValue(myObj, null);
var stateValue = objectValue.GetType().GetProperty("state").GetValue(objectValue, null);

“在任何地方都不指定属性”——确切地说是什么意思?为什么不指定“属性”?您是指类型还是字段名?为什么要使用反射呢?它的速度要慢得多,而且通常有更好的方法来实现你的目标,不管是什么。看见如果你问的是关于你更广泛目标的问题,而不是这个问题,你会得到更好的答案。问题是我想让它更具动态性,而不是指定属性名称,如果它可以通过索引读取“通过索引读取”——确切地说,这意味着什么?恐怕你没有把问题说清楚。您需要显示更多的上下文,并解释为什么使用反射是您可以接受的权衡。您当然可以在对象树中查找给定名称的任何属性,但是这有什么用处呢?你会如何使用它?请提供更多详细信息。例如,如果
重新模板
属性
具有相同名称的属性,您希望发生什么情况?你的例子并没有受到这个问题的影响,但你要求的是一个通用的解决方案,通用的解决方案需要起作用,嗯……一般来说。同时,请参阅和之类的帖子,它们可能会解决您的问题,或者至少为您指出正确的方向。基本上,我希望将给定的嵌套对象转换为Datatable,而无需编写太多代码并输入属性名称来访问其值。我已经说过,我不想在此处使用属性名称“属性”。因为我想让它成为dynamiccan,所以您可以解释如何在不传递属性名的情况下选择值。恐怕你没有完成这个问题。我已经说过我不想在这里使用属性名“attribute”。因为我想让dynamici试过了,但没用。属性[0]。名称返回“容量”