Array
(
)

List<object.GetType()> = new List<object.GetType()>

Joab Silveira
   - 08 fev 2013

//tenho as seguintes classes
#Código
class Item
{

}
class Order
{
public List<Item> Items { get; set; }
}

#Código
class Phone
{
}
class Seller
{
public List<Phone> PhoneNumbers { get; set; }
}

#Código
class MyAdapter
{
public List<Model> Read<Model>() where Model: new()
{
List<Model> result = new List<Model>
Model obj = new Model();
result.Add(obj);
PropertyInfo[] properties = typeof(Model).GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (PropertyInfo property in properties)
{
Type propertyType = property.PropertyType;
if (propertyType.IsGenericType)
{
Type propGenericType = propertyType.GetGenericTypeDefinition();
if (propGenericType == typeof(List<>))
{
Type listType = propertyType.GetGenericArguments()[0];

//o problema esta nesse ponto...
//preciso preencher a lista das propriedades filhas e depois atribuilas nos objetos pais
//chamada recursiva
//chama Read mais uma vez, agora passando como generic o tipo da propriedade filha
//esse ponto nao é reconhecido pelo compilador
List<listType> lst = this.Read<listType>();
property.SetValue(obj, lst, null);
//...o problema esta nesse ponto
}
}
}
return result;
}
}

//exemplo utilizando as classes acima
#Código
MyAdapter adp = new MyAdapter();
//fill list of orders with your items
List<Order> orders = adp.Read<Order>();
//fill list of sellers with your phonenumbers
List<Seller> sellers = adp.Read<Seller>();