我试图将值设置为类的嵌套属性动态地使用反射。 谁能帮我做这件事。
我有一类Region
像下面。
public class Region
{
public int id;
public string name;
public Country CountryInfo;
}
public class Country
{
public int id;
public string name;
}
我有一个Oracle数据读取器从参考光标提供的价值。
这将给我作为
ID,姓名,COUNTRY_ID,COUNTRY_NAME
我可以能够通过下面的值赋给Region.Id,Region.Name。
FieldName="id"
prop = objItem.GetType().GetProperty(FieldName, BindingFlags.Public | BindingFlags.Instance);
prop.SetValue(objItem, Utility.ToLong(reader_new[ResultName]), null);
而对于嵌套属性我可以能够通过阅读字段名创建一个实例做分配值到如下。
FieldName="CountryInfo.id"
if (FieldName.Contains('.'))
{
Object NestedObject = objItem.GetType().GetProperty(Utility.Trim(FieldName.Split('.')[0]), BindingFlags.Public | BindingFlags.Instance);
//getting the Type of NestedObject
Type NestedObjectType = NestedObject.GetType();
//Creating Instance
Object Nested = Activator.CreateInstance(typeNew);
//Getting the nested Property
PropertyInfo nestedpropinfo = objItem.GetType().GetProperty(Utility.Trim(FieldName.Split('.')[0]), BindingFlags.Public | BindingFlags.Instance);
PropertyInfo[] nestedpropertyInfoArray = nestedpropinfo.PropertyType.GetProperties();
prop = nestedpropertyInfoArray.Where(p => p.Name == Utility.Trim(FieldName.Split('.')[1])).SingleOrDefault();
prop.SetValue(Nested, Utility.ToLong(reader_new[ResultName]), null);
Nestedprop = objItem.GetType().GetProperty(Utility.Trim(FieldName.Split('.')[0]), BindingFlags.Public | BindingFlags.Instance);
Nestedprop.SetValue(objItem, Nested, null);
}
上述赋值Country.Id
。
但因为我每一次我不能抽到前面正在创建实例Country.Id
如果我去的下一步Country.Name值。
有谁可以告诉分配值的objItem(that is Region).Country.Id
和objItem.Country.Name
。 这意味着如何分配的,而不是创建实例,每次分配值的嵌套属性。
提前致谢。!