No se obtienen campos de GetType (). GetFields with BindingFlag.Default

Estoy usando las clases de Reflexión para obtener todos los campos dentro de un determinado objeto. Sin embargo, mi problema es que funciona perfectamente cuando los campos están dentro de una clase normal, como:

class test
{
   string test1 = string.Empty;
   string test2 = string.Empty;
}

Aquí obtengo tanto test1 como test2, mi problema es que uso la abstracción y, por lo tanto, varias clases combinadas.

Tengo algo como:

class test3 : test2
{
   string test4 = string.Empty;
   string test5 = string.Empty;
}

class test2 : test1
{
   string test2 = string.Empty;
   string test3 = string.Empty;
}
class test1
{
   string test0 = string.Empty;
   string test1 = string.Empty;
}

Pero cuando lo ejecuto, no recupero los campos de laGetType().GetFields(BindingFlag.Default).

Cada uno de esos campos también tiene una propiedad,get; set; adjunto a. Cuando ejecuto el código, obtengo las propiedades de regreso a test1 pero no los campos reales.

Este es el código con el que estoy tratando de obtener los campos:

FieldInfo[] fields = Obj.GetType().GetFields(BindingFlags.Default);
foreach (FieldInfo field in fields)

También he intentado:

FieldInfo[] fields = Obj.GetType().GetFields(BindingFlags.Public 
                                             | BindingFlags.Instance 
                                             | BindingFlags.NonPublic 
                                             | BindingFlags.Static);

Utilizo el mismo código para las propiedades:

PropertyInfo[] properties = Obj.GetType().GetProperties(BindingFlags.Public 
                                             | BindingFlags.Instance 
                                             | BindingFlags.NonPublic 
                                             | BindingFlags.Static);

foreach (PropertyInfo property in properties)

¿Alguna idea de por qué obtengo las propiedades de las clases abstraídas pero no los campos?

Respuestas a la pregunta(6)

Su respuesta a la pregunta