示例#1
0
        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();
                }
            }
        }
示例#2
0
        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();
                }
            }
        }