Penso ASP.NET MVC non ha uscita al momento questa domanda è stata fatta. Converte internamente oggetti anonimi in dizionari.
Basta dare un'occhiata allo HtmlHelper
class, ad esempio. Il metodo che traduce gli oggetti nei dizionari è lo AnonymousObjectToHtmlAttributes
. È specifico per MVC e restituisce un RouteValueDictionary
, tuttavia.
Se volete qualcosa di più generico, provate questo:
public static IDictionary<string,object> AnonymousObjectToDictionary(object obj)
{
return TypeDescriptor.GetProperties(obj)
.OfType<PropertyDescriptor>()
.ToDictionary(
prop => prop.Name,
prop => prop.GetValue(obj)
);
}
Uno intersting advatages di questa implementazione è che restituisce un dizionario vuoto per null
oggetti.
Ed ecco una versione generica:
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))
);
}
Molto simile (con LINQ): [Un elenco generico di classe anonima] (http://stackoverflow.com/questions/612689/a-generic-list- di-anonimo-classe) – nawfal
.Seleziona (...). AsEnumerable(). ToDictionary (k => k.id, v => v come oggetto) ha funzionato per me. La mia variabile era Dictionary –
Ravi
@Ravishankar: Non è necessario 'AsEnumerable()' qui, molto probabilmente. Non aggiunge nulla sopra a 'Select()'. – abatishchev