bezieht sich auf: Reflection - setting Type of returned obj? Ich habe ein Objekt Call Jobcard mit ein paar Eigenschaften, von denen eine andere Objekt namens Customer mit eigenen Eigenschaften, von denen eine andere verschachtelte Objekt namens Adresse ist.Reflection - Eigenschaften von geschachtelten Objekten erhalten
Diese beiden Funktionen behandeln auch andere Objekttypen.
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;
}
Das Problem ist, dass die PopulateChildObject Funktion funktioniert nicht, weil die Propertyinfo-Liste nicht, dass der übergebenen childObj ist. Wenn ich das dataObj ansehe, das an PopulateChildObject in der Uhr übergeben wurde, hat es 0 Attribute. Auch das an PopChildObj() übergebene dataObj hat den Typ System.Reflection.RuntimePropertyInfo 'anstelle von Customer. Was vermisse ich?
(antwortete Kommentar) –