ToDictionary<>

  /// <summary>
        /// Convert the object properties to a dictionary
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static IDictionary<string, object> ToDictionary(this object source)
        {
            return source.ToDictionary<object>();
        }

        /// <summary>
        /// Converts the object properties to a dictionary
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <returns></returns>
        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);
            }
            else
            {
                T newValue = (T)Convert.ChangeType(value, typeof(T));
                dictionary.Add(property.Name, newValue);
            }
        }

        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.");
        }
Example:
class MyClass
        {
            public MyClass()
            {
                MyProperty = "Value 1";
                MyProperty2 = "Value 2";
                MyInt = 2;
            }

            public string MyProperty { get; set; }
            public string MyProperty2 { get; set; }
            public int MyInt { get; set; }
        }

        [TestMethod]
        public void Test_ObjectToDictionary()
        {
            MyClass _Object = new MyClass();
            IDictionary<string, string> dic 
                = _Object.ToDictionary<string>();
        }

Description

Converts any object to a dictionary

Details

Double click on the code to select all.

 

;