Saber el tipo de objeto y sus propiedades a partir de List

publicado por: Anonymous

Tengo un método que recibe una lista de objetos:

private void escribe(List<object> lista)

que a priori no se de que clase son y quiero saber en tiempo de ejecución las propiedades de cada uno de los objetos dentro de la lista.

He probado con:

        Type type = lista.GetType();            
        var PropertyInfos = lista.GetType().GetProperties();

tambien he probado con:

        Type tip = lista.GetType();
        if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
        {
             var itemType = type.GetGenericArguments()[0];
        }

Pero no consigo recuperar las propiedades del objecto en cuestión.
Un saludo y gracias por la ayuda.

Edit: Añado informacion de la clase con la que estoy probado, aunque realmente quisiera que funcione para cualquiera.

 public class Prueba
{
    string prop1;
    int prop2;
    bool prop3;
    float prop4;
    //List<string> prop5;
    object prop6;}

Y todos estos campos estan transformados a propiedades con la primera letra en mayusculas

solución

El problema que tienes es que estas obteniendo el tipo de la List (que siempre va a ser de tipo List, cuando tu lo que quieres es obtener el tipo del object dentro de esa lista, para obtener sus propiedades.

Imaginemos este ejemplo. Tenemos una clase de prueba:

class Ejemplo
{
    public int pos1 { get; set; }
    public int pos2 { get; set; }
    public int pos3 { get; set; }
}

Ahora definimos tu lista List<object> y añadimos un objeto de tipo Ejemplo:

List<object> lista = new List<object>();

lista.Add(new Ejemplo() { pos1 = 1, pos2 = 2, pos3 = 3 });
var PropertyInfos = lista.First().GetType().GetProperties();
foreach (var prop in PropertyInfos)
{
     //aqui recorremos las propiedades
}

Fíjate que uso First para acceder al primer elemento de la lista, y de él obtengo primero el tipo y después sus propiedades.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *