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>();