Exemple #1
0
        public static BaseElement Deserialize(XmlElement xml)
        {
            string metadataType = xml.GetAttribute("Metadata-type");

            Type     parentType = typeof(BaseElement);
            Assembly assembly   = Assembly.GetExecutingAssembly();

            Type[] types = assembly.GetTypes();

            IEnumerable <Type> subclasses = types.Where(t => t.IsSubclassOf(parentType));

            foreach (Type type in subclasses)
            {
                if (type.Name == metadataType)
                {
                    BaseElement instance = (BaseElement)Activator.CreateInstance(type);
                    instance.DeserializeFromXml(xml);
                    return(instance);
                }
            }

            return(null);
        }
        private static void FillLinkTable(AssociativeTable <BaseElement, List <BaseElement> > linkTable, BaseElement current)
        {
            if (!linkTable.IsKeyInTable(current))
            {
                linkTable.Add(current, new List <BaseElement>());
            }

            if (current is Category category)
            {
                foreach (var child in category)
                {
                    linkTable[current].Add(child);
                    FillLinkTable(linkTable, child);
                }
            }
        }