Creo ASP.NET MVC no lo hizo salir en el momento en que se hizo esta pregunta. Convierte objetos anónimos a diccionarios internamente.
Solo echa un vistazo al HtmlHelper
class, por ejemplo. El método que traduce objetos a diccionarios es el AnonymousObjectToHtmlAttributes
. Sin embargo, es específico para MVC y devuelve RouteValueDictionary
.
Si quieres algo más genérico, intente esto:
public static IDictionary<string,object> AnonymousObjectToDictionary(object obj)
{
return TypeDescriptor.GetProperties(obj)
.OfType<PropertyDescriptor>()
.ToDictionary(
prop => prop.Name,
prop => prop.GetValue(obj)
);
}
Uno advatages intersting de esta aplicación es que devuelve un diccionario vacío para null
objetos.
Y aquí es una versión genérica:
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))
);
}
Muy similar (con LINQ): [Una lista genérica de clase anónima] (http://stackoverflow.com/questions/612689/a-generic-list- of-anonymous-class) – nawfal
.Seleccione (...). AsEnumerable(). ToDictionary (k => k.id, v => v como objeto) funcionó para mí. Mi variable era Dictionary –
Ravi
@Ravishankar: No necesitas 'AsEnumerable()' aquí, muy probablemente. No agrega nada en la parte superior de 'Seleccionar()'. – abatishchev