Прежде всего, у вас неверный XML. Вам не хватает </contact>
закрывающего тега, а также </people>
. Кроме того, структура ужасна, учитывая то, как вы обрабатываете записи chid. Вместо этого должно быть так:
<people>
<person>
<name>title</name>
<address>Kate</address>
<phone>Smith</phone>
<age>27</age>
<children>
<person>
<name>sub</name>
<address>Details</address>
<phone>900033</phone>
</person>
</children>
</person>
<person>
<name>title</name>
<phone>Manu</phone>
<age>30</age>
<children>
<person>
<name>AnotherName</name>
<address>Details</address>
<phone>900033</phone>
</person>
</children>
</person>
</people>
Во-вторых, вы можете сериализовать свой класс и затем выполнить соответствующие привязки. Например, общая структура сериализации для вашего случая будет выглядеть следующим образом:
[XmlRoot("people")]
public class People
{
[XmlElement("person")]
public List<Person> RegisteredPeople { get; set; }
}
public class Person
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("address")]
public string Address { get; set; }
[XmlElement("phone")]
public string Phone { get; set; }
[XmlArray("children")]
[XmlArrayItem("person")]
public List<Person> Children { get; set; }
}
Десериализатор должен действовать следующим образом:
XmlSerializer serializer = new XmlSerializer(typeof(People));
StringReader reader = new StringReader(YOUR_XML);
People p = (People)serializer.Deserialize(reader);