J aimerais pouvoir lire toutes les champs et propriétés d une classe par reflection.
Pour les types de base ou les classes normales, c est bon, mais pour les listes d objects, je ne trouve pas comment récuperer le type de ces objets.

Voilà ma méthode de test.
Là où je coince, c est pour fi.FieldType.IsGenericType. J ai typiquement ici une list d object, et j'aimerais recuperer ces objets...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private static void GetComponentReflected(object compObj)
        {
            Console.WriteLine("GetComponentReflected");
            Type objType = compObj.GetType();
            if (!objType.IsClass)
                return;
            Console.WriteLine(objType.Name);
            foreach (FieldInfo fi in objType.GetFields())
            {
                object val = fi.GetValue(compObj);
                if (val == null)
                    continue;
                if (fi.FieldType.Namespace == "ConsoleApplication2")
                    GetComponentReflected(val);
                else if (fi.FieldType.IsGenericType)
                {
                    if (fi.FieldType.Name.StartsWith("List"))
                    {
                        ICollection col = (ICollection)val;
                        foreach (object subObj in col)
                            GetComponentReflected(subObj); 
                    }
                    else
                        GetComponentReflected(val);
                }
                else
                {   
                    displayKeyVal(fi.Name, val.ToString());
                }
            }
       }
       private static void displayKeyVal(string name, string val)
       {
            Console.WriteLine("Name: " + name + ", Value:" + val);
       }