public static void ImportXML(string path, string file) { using (var xml = new XmlDataStore<ConquestSerial, Conquest>(path, file)) { xml.OnDeserialize = doc => { XmlElement root = doc.DocumentElement; if (root == null) { return true; } foreach (XmlElement conquestNode in root.ChildNodes.OfType<XmlElement>()) { string typeAttr = conquestNode.GetAttribute("type"); var type = new TypeSelectProperty<Conquest>(typeAttr); if (!type.IsNotNull) { continue; } var conquest = type.CreateInstance<Conquest>(); PropertyList<Conquest> pList = conquest.GetProperties( BindingFlags.Instance | BindingFlags.Public, p => p.CanWrite && p.Name != "Enabled" && p.Name != "InvokeReset" && p.Name != "InvokeClear"); foreach (XmlElement conquestPropNode in conquestNode.ChildNodes.OfType<XmlElement>()) { string pName = conquestPropNode.Name; string dType = conquestPropNode.GetAttribute("type"); string data = conquestPropNode.GetAttribute("value"); switch (dType) { case "Type": { Type t = null; if (!String.IsNullOrWhiteSpace(data)) { t = Type.GetType(data, false, true) ?? ScriptCompiler.FindTypeByName(data, true) ?? ScriptCompiler.FindTypeByFullName(data); } pList.Set(pName, t); } break; default: { DataType dataType; if (!Enum.TryParse(dType, out dataType)) { continue; } SimpleType sType; if (SimpleType.TryParse(data, dataType, out sType) && sType.Flag != DataType.Null) { pList.Set(pName, sType.Value); } } break; } } pList.Serialize(conquest); xml.AddOrReplace(conquest.UID, conquest); } return true; }; if (xml.Import() == DataStoreResult.OK) { xml.CopyTo(ConquestRegistry); xml.Document.Delete(); } foreach (Exception e in xml.Errors) { e.ToConsole(); } } }
public static void ImportXML(string path, string file) { using (var xml = new XmlDataStore <ConquestSerial, Conquest>(path, file)) { xml.OnDeserialize = doc => { XmlElement root = doc.DocumentElement; if (root == null) { return(true); } foreach (XmlElement conquestNode in root.ChildNodes.OfType <XmlElement>()) { string typeAttr = conquestNode.GetAttribute("type"); var type = new TypeSelectProperty <Conquest>(typeAttr); if (!type.IsNotNull) { continue; } var conquest = type.CreateInstance <Conquest>(); PropertyList <Conquest> pList = conquest.GetProperties( BindingFlags.Instance | BindingFlags.Public, p => p.CanWrite && p.Name != "Enabled" && p.Name != "InvokeReset" && p.Name != "InvokeClear"); foreach (XmlElement conquestPropNode in conquestNode.ChildNodes.OfType <XmlElement>()) { string pName = conquestPropNode.Name; string dType = conquestPropNode.GetAttribute("type"); string data = conquestPropNode.GetAttribute("value"); switch (dType) { case "Type": { Type t = null; if (!String.IsNullOrWhiteSpace(data)) { t = Type.GetType(data, false, true) ?? ScriptCompiler.FindTypeByName(data, true) ?? ScriptCompiler.FindTypeByFullName(data); } pList.Set(pName, t); } break; default: { DataType dataType; if (!Enum.TryParse(dType, out dataType)) { continue; } SimpleType sType; if (SimpleType.TryParse(data, dataType, out sType) && sType.Flag != DataType.Null) { pList.Set(pName, sType.Value); } } break; } } pList.Serialize(conquest); xml.AddOrReplace(conquest.UID, conquest); } return(true); }; if (xml.Import() == DataStoreResult.OK) { xml.CopyTo(ConquestRegistry); xml.Document.Delete(); } foreach (Exception e in xml.Errors) { e.ToConsole(); } } }