myślę ASP.NET MVC nie wyjście w czasie kwestia ta została dokonana. Umożliwia konwersję anonimowych obiektów do słowników wewnętrznie.
Wystarczy spojrzeć na przykład na HtmlHelper
class. Metoda tłumacząca obiekty na słowniki to AnonymousObjectToHtmlAttributes
. Jest to specyficzne dla MVC i zwraca wartość RouteValueDictionary
.
Jeśli chcesz coś bardziej ogólny, spróbuj tego:
public static IDictionary<string,object> AnonymousObjectToDictionary(object obj)
{
return TypeDescriptor.GetProperties(obj)
.OfType<PropertyDescriptor>()
.ToDictionary(
prop => prop.Name,
prop => prop.GetValue(obj)
);
}
Jeden zachwycaliśmy advatages tej realizacji jest to, że zwraca pusty słownika dla null
obiektów.
A oto jedna wersja ogólna:
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))
);
}
Bardzo podobny (z LINQ): [A generic lista anonimowej klasy] (http://stackoverflow.com/questions/612689/a-generic-list- of-anonymous-class) – nawfal
. Wybierz (...). AsEnumerable(). ToDictionary (k => k.id, v => v jako obiekt) pracował dla mnie. Moja zmienna to Słownik –
Ravi
@Ravishankar: Najprawdopodobniej nie potrzebujesz tutaj 'AsEnumerable()'. Nie dodaje niczego na wierzchu 'Wybierz()'. – abatishchev