Я просто думаю здесь вслух. Возможно, у вас может быть неуниверсальный метод PrintListProperties, который выглядит примерно так:
private void PrintListProperties(IList list, Type type)
{
//reflect over type and use that when enumerating the list
}
Затем, когда вы встретите вложенный список, сделайте что-то вроде этого:
if (p.PropertyType.IsGenericType)
{
PringListProperties((Ilist)p,p.PropertyType.GetGenericArguments()[0]);
}
Опять же, не проверял это, но поверните его ...