Я рекурсивно перебираю свойства объекта, используя следующий метод:
void GetProps(object obj)
{
if (obj == null)
return;
var objType = obj.GetType();
var properties = objType.GetProperties();
foreach (var property in properties)
{
object value = property.GetValue(obj, null);
if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType))
{
var enumerable = (IEnumerable)value;
foreach (object child in enumerable)
GetProps(child);
}
else
{
GetProps(value);
}
}
}
Объект очень сложный (более 30 классов). Я получаю StackOverflowException
, когда углубляюсь в объект на GetProps(value
.
Есть ли способ перехватить исключение и проверить, почему оно не работает, и решить проблему?
EDIT
Я добавил отказоустойчивый в верхней части метода:
if (visited.Contains(obj))
return;
visited.Add(obj);
Проблема не в циклических ссылках (которых у меня нет), а в типах свойств, таких как DateTime
, int
и decimal
. который предполагал, что они примитивны, но свойство IsPrimitive
равно false
.
Могу ли я различать такие типы от моих собственных классов?