public static T DictionaryToObject <T>(this IOrderedDictionary dict) { var accessor = TypeAccessor.Create(typeof(T)); var t = accessor.CreateNew(); var props = accessor.GetMembers(); foreach (var key in dict.Keys) { if (props.Select(a => a.Name).ToList().Contains(key)) { var p = props.First(b => string.Equals(b.Name, key.ToString(), StringComparison.CurrentCultureIgnoreCase)); var type = p.Type; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>)) { type = Nullable.GetUnderlyingType(type); } var value = dict.GetValue <object, object>(key); if (type != null && value != null) { value = Convert.ChangeType(value, type, null); } accessor[t, key.ToString()] = value; } } return((T)t); }