Я думаю, что ASP.NET MVC не завершился, когда был задан этот вопрос. Он конвертирует анонимные объекты в словари внутри.
Взгляните, например, на HtmlHelper
класс . Метод, который переводит объекты в словари: AnonymousObjectToHtmlAttributes
. Это специфицировано в MVC и возвращает RouteValueDictionary
, однако.
Если вы хотите что-то более общее, попробуйте это:
public static IDictionary<string,object> AnonymousObjectToDictionary(object obj)
{
return TypeDescriptor.GetProperties(obj)
.OfType<PropertyDescriptor>()
.ToDictionary(
prop => prop.Name,
prop => prop.GetValue(obj)
);
}
Одним из интересных моментов этой реализации является то, что она возвращает пустой словарь для null
объектов.
А вот одна общая версия:
public static IDictionary<string,T> AnonymousObjectToDictionary<T>(
object obj, Func<object,T> valueSelect
)
{
return TypeDescriptor.GetProperties(obj)
.OfType<PropertyDescriptor>()
.ToDictionary<PropertyDescriptor,string,T>(
prop => prop.Name,
prop => valueSelect(prop.GetValue(obj))
);
}