Recorrer propiedades de una clase usando System.Reflection

Recorrer propiedades de una clase usando System.Reflection

La idea de este articulo es poder recorrer todas las propiedades de una clase para obtener su nombre, su tipo y su valor. Para ello utilizaremos System.Reflection

var prop = oj.GetType().GetProperties();
foreach (var props in prop)
{
nombre = props.Name
tipo = props.PropertyType.Name
valor = props.GetValue(oj, null)
}

Esto es muy útil ,por ejemplo, para hacer un método de persistencia o una serializacion para esta clase. Así podemos montar una lista de parámetros para un procedimiento almacenado o crear un XML desde esta.

También podemos crear unos atributos personalizados para poder hacer marcadores de esta manera:

public class MiAtributo : Attribute{ }

Y marcar las propiedades de la clase así:

[MiAtributo]
public string A { get; set; }

Añadiendo el siguiente using en el archivo de la clase:

using System.ComponentModel.DataAnnotations;

Así podemos tratar de manera diferente las propiedades mediante una variable para consultar si tiene o no la propiedad mi atributo:

public static bool tieneMiAtributo(PropertyInfo prop)
        {
            object[] attrs = prop.GetCustomAttributes(true);
            foreach (object attr in attrs)
            {
                tieneMiAtributo customAttr = attr as MiAtributo;
                if (customAttr != null)
                {
                    return false;
                }
            }
            return true;
        }
}