Rinse, repeat... i.e. the same again, for the value returned from:
object innerValue = prop.GetValue(obj);
Note that there is a chance that innerValue could be null; in this
case, you can use:
PropertyDescriptorCollection innerProps =
TypeDescriptor.GetProperties(prop.PropertyType);
This will give you the properties associated with the Type matching
the property - one minor caveat: if the value implements
ICustomTypeDescriptor, then it won't have chance to speak for itself,
since this only works on instances. From 2.0, the preferred approach
for custom properties is TypeDescriptionProvider, which works on both
the Type and an instance.
Marc