You can use the TypeDescriptor
class to do this:
foreach(PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj))
{
string name = descriptor.Name;
object value = descriptor.GetValue(obj);
Console.WriteLine("{0}={1}", name, value);
}
TypeDescriptor
lives in the System.ComponentModel
namespace and is the API that Visual Studio uses to display your object in its property browser. It’s ultimately based on reflection (as any solution would be), but it provides a pretty good level of abstraction from the reflection API.