如何动态读取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]。名称返回“容量”