//! recursive read from XML void ReadEntity(XmlTextReader xmlReader, Entity parent) { Entity entity = null; string entityTypeName = xmlReader.Name; if (parent != null) { // create entity string assemblyName = Assembly.GetExecutingAssembly().GetName().Name; string fullTypeName = assemblyName + "." + entityTypeName; entity = Assembly.GetExecutingAssembly().CreateInstance(fullTypeName) as Entity; } else { string thisTypeName = GetType().Name; Debug.Assert(thisTypeName == entityTypeName, "Trying to load an entity of type " + entityTypeName + " into an " + thisTypeName); entity = this; } // read children while(xmlReader.Read()) { if(xmlReader.NodeType == XmlNodeType.EndElement) { break; } else if(xmlReader.NodeType == XmlNodeType.Element) { if (xmlReader.Name == "Properties") { // read properties PropertyStream stream = new PropertyStream(); stream.ReadFromXML(xmlReader, null); entity.Serialize(stream); } else { ReadEntity(xmlReader, entity); } } } // end while if(parent != null) { // Add entity after it has been serialized to ensure proper event handling inside of AddChild() parent.AddChild(entity); } }