Как установить Vaues для вложенного свойства с помощью C # Reflection.?
Я пытаюсь установить значение для вложенного свойства класса динамически с помощью отражения. Может ли кто-нибудь помочь мне сделать это.
У меня классRegion
как ниже.
public class Region
{
public int id;
public string name;
public Country CountryInfo;
}
public class Country
{
public int id;
public string name;
}
У меня есть читатель данных Oracle для предоставления значений из курсора Ref.
что даст мне как
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
значение, если я иду на Next Country.Name.
Кто-нибудь может сказать, мог бы присвоить значенияobjItem(that is Region).Country.Id
а такжеobjItem.Country.Name
, Это означает, как назначать значения для вложенных свойств вместо создания экземпляра и назначения каждый раз.
Заранее спасибо.!