beratcarsi
1/27/2011 - 3:53 PM

C# convert an object to a dictionary of its properties

C# convert an object to a dictionary of its properties

public static class ObjectToDictionaryHelper
{
  public static IDictionary<string, object> ToDictionary(this object source)
  {
    return source.ToDictionary<object>();
  }

  public static IDictionary<string, T> ToDictionary<T>(this object source)
  {
    if (source == null) 
      ThrowExceptionWhenSourceArgumentIsNull();

    var dictionary = new Dictionary<string, T>();
    foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(source))
      AddPropertyToDictionary<T>(property, source, dictionary);
    
    return dictionary;
  }

  private static void AddPropertyToDictionary<T>(PropertyDescriptor property, object source, Dictionary<string, T> dictionary)
  {
    object value = property.GetValue(source);
    if (IsOfType<T>(value))
      dictionary.add(property.Name, (T)value);
  }

  private static bool IsOfType<T>(object value)
  {
    return value is T;
  }

  private static void ThrowExceptionWhenSourceArgumentIsNull()
  {
    throw new ArgumentNullException("source", "Unable to convert object to a dictionary. The source object is null.");
  }
}