public class GenericModel<T1,T2>
public T1 Model1 { get; set; }
public T2 Model2 { get; set; }
public static void Main()
var gm = new GenericModel<int, string>();
var properties = gm.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach(var property in properties) {
var x = gm.GetType().GetGenericTypeDefinition().GetProperty(property.Name);
Console.WriteLine("{0} = {1}", x.Name, x.PropertyType.Name);