Я думаю, что алгоритм похож на
SomeStructure GetFromObject(object o)
{ var tt = new Stack<Helper>();
types.Push(new Helper { Type = o.GetType(), Name = string.Empty });
while (tt.Count > 0)
{
Helper tHelper = tt.Pop();
Type t = tHelper.Type;
ProcessTheResults( add to a list, whatever ...);
if (t.IsValueType || t == typeof(string))
continue;
if (t.IsGenericType)
{
foreach (var arg in t.GetGenericArguments())
tt.Push(new Helper { Type = arg, Name = string.Empty });
continue;
}
foreach (var propertyInfo in t.GetProperties())
{
tt.Push(new Helper { Type = propertyInfo.PropertyType, Name = propertyInfo.Name });
}
}
return result;
}
, где класс Helper
class Helper {public Type Type{get; set;} public string Name {get; set;}}
Единственное, чего я не понимаю, это наличие следующей структуры:
public class SimpleClass
{
public int IdSimpleClass { get; set; }
public string NameSimpleClass { get; set; }
}
public class NestingClass
{
public string Address { get; set; }
public List<SimpleClass> SimpleClass { get; set; }
}
public class SuperNestingClass
{
public string SomeId { get; set; }
public string AnotherId { get; set; }
public Guid Guid { get; set; }
public List<NestingClass> NestingClass { get; set; }
}
результат в консоли , так как вы можете указать, что адресом должно быть AddressNestingClass, а не просто Adress, поскольку свойство Address является членом NestingClass, а не SuperNestingClass.Есть идеи, почему это происходит?