Puede obtener todas las propiedades de un tipo utilizando el método GetProperties
. A continuación, puede filtrar esta lista mediante el método de extensión LINQ Where
. Finalmente puede proyectar las propiedades usando el método de extensión LINQ Select
o un atajo conveniente como ToDictionary
.
Si desea limitar la enumeración de las propiedades que tienen de tipo String
puede utilizar este código:
IDictionary<String, String> = myObject.GetType()
.GetProperties()
.Where(p => p.CanRead && p.PropertyType == typeof(String))
.ToDictionary(p => p.Name, p => (String) p.GetValue(myObject, null));
Esto creará un diccionario que mapea nombres de propiedad a los valores de propiedad. Como el tipo de propiedad está limitado a String
, es seguro emitir el valor de la propiedad a String
y el tipo del tipo devuelto es IDictionary<String, String>
.
Si por el contrario desea que todas las propiedades que puede hacerlo de esta manera:
IDictionary<String, Object> = myObject.GetType()
.GetProperties()
.Where(p => p.CanRead)
.ToDictionary(p => p.Name, p => p.GetValue(myObject, null));
En lugar de pi.GetGetMethod() Invoke (myObject, null) Prefiero usar pi.GetValue (myObject, null) -. Sencillo de leer. – Sam