I've got a working program that turns XML into a XmlObject. The object can then be accessed using getName(), getValue(), and getChild(). The code works but I'm looking for recommendations. I couldn't find anything built into c# that creates an object from XML. I'm currently learning by doing games in Unity so hopefully the code isn't too awful. The static class for creating an XmlObject namespace XmlToObject { using System.Collections.Generic; using System.Xml; using System.IO; using UnityEngine; /// XmlObjectCreator turns xml into an XmlObject public static class XmlObjectCreator { /// Generates the xml object. public static XmlObject generateXmlObject (TextAsset xmlTextFile) { //load the xml document XmlDocument xmlDoc = new XmlDocument (); xmlDoc.Load (new StringReader (xmlTextFile.text)); //Return the built object return recursiveBuildXmlObject (firstNode); } /// Recursivly builds an xml object. private static XmlObject recursiveBuildXmlObject (XmlNode startNode) { //Create the buildObject XmlObject buildObject = new XmlObject (); //Set the name and value buildObject.setName (startNode.Name); buildObject.setValue (startNode.InnerText); //Add child nodes to subList if they exist foreach (XmlNode child in startNode.ChildNodes) { buildObject.add (recursiveBuildXmlObject (child)); } //Once children are done return buildObject; } } } The XmlObject is what is actually used for accessing the data taken from the XML document. namespace XmlToObject { using System.Collections.Generic; /// Xml object is the actual object used for navigating the data. public sealed class XmlObject { private string name; private string value; private List<XmlObject> subList; /// Initializes a new instance of the XmlObject class. public XmlObject () { subList = new List<XmlObject> (); value = null; } /// Add the specified inputXmlObject. public void add (XmlObject inputXmlObject) { subList.Add (inputXmlObject); } /// Gets a xml child by name. public XmlObject getChild (string name) { foreach (XmlObject child in subList) { if (name.Equals (child.getName ())) { return child; } } throw new System.ArgumentException ("Child with name: " + name + " does not exist."); } //Setters and getters for fields: name, value removed for size } } I've seen lots of code that deals with known XML structures, but few examples where the XML structure is not predefined/known. I'm sure that there is a better way to do what this code does, I'm just not sure what it is.