Estoy tratando de establecer un valor a una Propiedad de clase anidada dinámicamente mediante la reflexión. ¿Alguien podría ayudarme a hacer esto?Cómo establecer vaues a la propiedad anidada usando C# Reflection.?
Estoy teniendo una clase Region
como a continuación.
public class Region
{
public int id;
public string name;
public Country CountryInfo;
}
public class Country
{
public int id;
public string name;
}
Tengo un lector de datos Oracle para proporcionar los valores del cursor Ref.
que me dará como
de identificación, nombre, country_id, COUNTRY_NAME
pude capaz de asignar los valores a la Region.Id, Region.Name por debajo.
FieldName="id"
prop = objItem.GetType().GetProperty(FieldName, BindingFlags.Public | BindingFlags.Instance);
prop.SetValue(objItem, Utility.ToLong(reader_new[ResultName]), null);
Y para la propiedad Nested pude capaz de hacer los valores asignar a la que más adelante mediante la creación de una instancia leyendo el nombre del campo.
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);
}
Los valores de asignación anteriores a Country.Id
.
Pero como estoy creando una instancia todas y cada una de las veces no pude obtener el valor Country.Id
anterior si selecciono el nombre siguiente del país.
Podría alguien decir podría asignar valores al objItem(that is Region).Country.Id
y objItem.Country.Name
. Lo que significa cómo asignar valores a las propiedades anidadas en lugar de crear una instancia y asignar cada vez.
Gracias de antemano.!
duplicado Posible de http://stackoverflow.com/questions/1954746/using-reflection -in-c-sharp-to-get-properties-of-a-nested-object –