Example #1
0
        //! 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);
            }
        }