Add a few BindingFlags:
child.GetType().GetProperty("Name",
BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
DeclaredOnly means:
Indicates that only members declared at the hierarchy level of the supplied type should be considered. Inherited members are not counted.
, LINQ ( , , Attribute.IsDefined):
child.GetType().GetProperties().Single(
prop => prop.Name == "Name" && prop.DeclaringType == typeof(Child));