Лучший (то есть самый простой) способ, который также включает в себя все родительские / дочерние отношения, это ...
DataSet myDataSet = new DataSet();
myDataSet.ReadXml("myXmlFile.xml");
Тад!
Кстати, если у вас есть XML в памяти (а не в файле), вы можете использовать одну из перегрузок «ReadXml» для чтения его из потока.