Menu

Convertir objetos en diccionario clave/valor

Agosto 5, 2010 - ASP.NET

Alguna vez estuve en la necesidad de convertir un objeto común y silvestre de esos que deambulan libres por la selva, en un diccionario clave/valor, era un módulo que creaba formularios de forma dinámica y los renderizaba en pantalla. 

Luego de horas buscando como pasarle a la clase todos los objetos y varios intentos fallidos, decidí que la mejor forma de crearlo era utilizando un diccionario pues así me aseguraba que todo los objetos tendrían una misma forma y podía consultar los valores cómodamente mientras mi clase se encargaba de crear los controles en pantalla.

Por aquel entonces  hice un código un poco desordenado, me lo he vuelto a topar y decidí compartirlo, quizá alguien salve el mundo con este simple procesamiento de menos de 10 líneas de código que me llevo cerca de 4 horas hacerlo.

Necesitas el namespace System.ComponentModel


var MyObject = new { codigo = "123", nombre = "Eduardo Ortega" };

Dictionary<string, object> MyDictionary = new Dictionary<string, object>();
foreach (PropertyDescriptor Descriptor in TypeDescriptor.GetProperties(MyObject))
{
MyDictionary.Add(Descriptor.Name, Descriptor.GetValue(MyObject));
}

Console.WriteLine(MyDictionary["codigo"]);

Ahora, mientras hacía el post se me ocurrió que sería mejor crearlo en un método de extensión que heredara del la clase Object, así podemos crear una dll con nuestras extensiones reutilizable en cualquiera de nuestros proyectos, aquí el código:


public static class Extensions
{
public static Dictionary<string, object> ToDictionary(this object MyObject)
{
Dictionary<string, object> MyDictionary = new Dictionary<string, object>();
foreach (PropertyDescriptor Descriptor in TypeDescriptor.GetProperties(MyObject))
{
MyDictionary.Add(Descriptor.Name, Descriptor.GetValue(MyObject));
}

return MyDictionary;
}
}

Happy coding!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *