Un paio di mesi ho scritto questo
tip su come utilzzare la reflection per caricare una classe tipizzata.
Oggi utilizzando la stessa funzione per una entity che ereditava da una altra classe ho dovuto fare chiaramente una modifica perchè altrimenti si prendeva tutte le proprietà della classe base.
Come primo approccio ho pensato ad usare i BindingFlags
esempio
PropertyInfo[] listProperty;
Type _type = item.GetType();
listProperty = _type.GetProperties(BindingFlags.DeclaredOnly);
Dove DeclaredOnly dice che non recupera le proprietà ereditate.
Invece questo non funziona non chiedetemi perchè alla fine ho risolto inserendo una if testando la proprietà DeclaringType che recupera la classe dove viene dichiarata la proprietà.
foreach (PropertyInfo singleProperty in listProperty)
{
if(singleProperty.DeclaringType.ToString().Equals(item.ToString()))
{
if(reader[singleProperty.Name] != DBNull.Value)
{
singleProperty.SetValue(item,reader[singleProperty.Name] , null);
}
}
Qualcuno ha avuto il mio stesso problema? come ha risolto?
Fatemi sapere.