Я думаю, что ASP.NET MVC не выходил в то время, когда был задан этот вопрос. Он действительно конвертирует анонимные объекты в словари внутренне.
Взгляните, например, на HtmlHelper
class. Метод, который переводит объекты в словари, - это _ 2_. Однако он специфичен для 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))
);
}
person
jpbochi
schedule
04.02.2012
AsEnumerable()
. Он ничего не добавляет поверхSelect()
. - person abatishchev   schedule 23.10.2014object
не анонимный тип. - person BrainSlugs83   schedule 04.06.2021