Uses reflection to output a string dump of all the object's properties and values in a nice readable format. Should only be used for debug/error dumps as performance of reflection is obviously a concern.
using System.Text;
public static class ObjectExtensions
{
/// <summary>
/// Uses reflection to output a string dump of all the object's properties
/// and values in a nice readable format. Should only be used for
/// debug/error dumps as performance of reflection is obviously a concern.
/// </summary>
/// <param name="instance">Object instance to dump info for.</param>
/// <returns>Formatted friendly string of object information.</returns>
public static string Dump(this object instance)
{
var flags = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.FlattenHierarchy;
var propInfos = instance.GetType().GetProperties(flags);
var sb = new StringBuilder();
string typeName = instance.GetType().Name;
sb.AppendLine(typeName);
sb.AppendLine("".PadRight(typeName.Length + 5, '='));
foreach (System.Reflection.PropertyInfo propInfo in propInfos)
{
sb.Append(propInfo.Name);
sb.Append(": ");
if (propInfo.GetIndexParameters().Length > 0)
{
sb.Append("Indexed Property cannot be used");
}
else
{
object value = propInfo.GetValue(instance, null);
sb.Append(value != null ? value : "null");
}
sb.Append(System.Environment.NewLine);
}
return sb.ToString();
}
}