(:source lang=C# :)
using System.Reflection; ... public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append(this.GetType().ToString() + ": {"); sb.Append("Foo: {"); foreach (PropertyInfo p in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) { sb.Append(p.Name + ": " + p.GetValue(this, null) + "; "); } sb.Append("}"); return sb.ToString(); }