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); } } }