private IValueProvider[] FindNavigableProperties(object o)
{
if (o.GetType().IsPrimitive)
{
return EmptyValueProviderArray;
}
ArrayList children = new ArrayList();
BindingFlags flags = BindingFlags.Instance | BindingFlags.Public;
foreach (MemberInfo mi in o.GetType().FindMembers(MemberTypes.Property | MemberTypes.Field, flags, null, null))
{
PropertyInfo pi = mi as PropertyInfo;
if (null != pi)
{
if (pi.CanRead && 0 == pi.GetGetMethod().GetParameters().Length)
{
children.Add(new PropertyInfoValueProvider(pi));
}
}
else
{
children.Add(new FieldInfoValueProvider((FieldInfo)mi));
}
}
return (IValueProvider[])children.ToArray(typeof(IValueProvider));
}
}