fait référence à: Reflection - setting Type of returned obj? J'ai un objet Call Jobcard avec quelques propriétés, dont l'un est un autre objet appelé Customer avec ses propres propriétés, dont l'un est un autre objet imbriqué appelé Adress.Réflexion - obtention des propriétés des objets imbriqués
Ces 2 fonctions traitent également d'autres types d'objets.
private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow)
{
//Type type = dataObj.GetType();
System.Reflection.PropertyInfo[] proplist = dataObj.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo propertyitem in proplist)
{
if(propertyitem.Name != "")
//s += propertyitem.Name + ":" + (propertyitem.GetValue(dataObj,null)).ToString() + "\r\n";
try
{
propertyitem.SetValue(dataObj, dataRow[propertyitem.Name], null);
}
catch (Exception ex)
{
if (ex.Message.Contains("does not belong to table"))
{
propertyitem.SetValue(dataObj, PopulateChildObject(propertyitem, dataRow), null);
}
else
throw;
}
}
return dataObj;
}
private object PopulateChildObject(object dataObj, System.Data.DataRow dataRow)
{
System.Reflection.PropertyInfo[] proplist = dataObj.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo propertyitem in proplist)
{
if(propertyitem.Name != "")
try
{
propertyitem.SetValue(dataObj, dataRow[propertyitem.Name], null);
}
catch (Exception ex)
{
if (ex.Message.Contains("does not belong to table"))
{
propertyitem.SetValue(dataObj, PopulateChildObject(propertyitem, dataRow), null);
}
else
throw;
}
}
return dataObj;
}
Le problème est que la fonction PopulateChildObject ne fonctionne pas parce que la liste est PropertyInfo pas celle du childObj passé. Si je regarde le dataObj passé à PopulateChildObject dans la montre, il a 0 Attributs. Aussi le dataObj passé à PopChildObj() a le type de System.Reflection.RuntimePropertyInfo 'au lieu du type Client. Qu'est-ce que je rate?
(répondu à un commentaire) –