Here is an extension that will report standard types such as string, int and Datetime, but will also report string lists (shown below in AccessPoints , which failed to process above). Note that the output is aligned, for example:
Name : Omegaman ID : 1 Role : Admin AccessPoints : Alpha, Beta, Gamma WeekDays : Mon, Tue StartDate : 3/18/2014 12:16:07 PM
The following is an extension that accepts any type if its class. It then reflects on public and private properties and if they are not null reports.
public static string ReportAllProperties<T>(this T instance) where T : class { if (instance == null) return string.Empty; var strListType = typeof(List<string>); var strArrType = typeof(string[]); var arrayTypes = new[] { strListType, strArrType }; var handledTypes = new[] { typeof(Int32), typeof(String), typeof(bool), typeof(DateTime), typeof(double), typeof(decimal), strListType, strArrType }; var validProperties = instance.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(prop => handledTypes.Contains(prop.PropertyType)) .Where(prop => prop.GetValue(instance, null) != null) .ToList(); var format = string.Format("{{0,-{0}}} : {{1}}", validProperties.Max(prp => prp.Name.Length)); return string.Join( Environment.NewLine, validProperties.Select(prop => string.Format(format, prop.Name, (arrayTypes.Contains(prop.PropertyType) ? string.Join(", ", (IEnumerable<string>)prop.GetValue(instance, null)) : prop.GetValue(instance, null))))); }
Using
myInstance.ReportAllProperties()
Please note that this is based on my C # blog post : ToString to report all the properties even of Private Ones Via Reflection , which provides a more reliable explanation of what is happening.
Omegaman
source share