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); }
Partager