Beispiel #1
0
        public IEnumerable <SettingsManagerSection> Load(XPathNavigator nav)
        {
            List <SettingsRawItem> rawData = new List <SettingsRawItem>();

            XPathNodeIterator iter = nav.Select("/data/item");

            if (iter != null)
            {
                while (iter.MoveNext())
                {
                    try
                    {
                        var item = new SettingsRawItem();

                        item.Name  = iter.Current.GetAttribute("name", "");
                        item.Type  = iter.Current.GetAttribute("type", "");
                        item.Value = iter.Current.Value;

                        rawData.Add(item);
                    }
                    catch (Exception ex)
                    {
                        Logger.LogWarn("Can't parse settings item value: " + ex.Message);
                    }
                }
            }

            return(new SettingsManagerSection[] { new SettingsManagerSection("temporary", _settingsManager, this) });
        }
Beispiel #2
0
        public object DeserializeRawItem(SettingsRawItem rawItem)
        {
            try
            {
                StringReader reader = new StringReader(rawItem.Value);
                Type         type   = Type.GetType(rawItem.Type, true);

                XmlSerializer serializer = new XmlSerializer(type);
                object        obj        = serializer.Deserialize(reader);
                reader.Close();

                return(obj);
            }
            catch (Exception ex)
            {
                Logger.LogWarn("Can't deserialize setting from string: " + rawItem.Value + "; exception: " + ex.Message);
            }

            return(null);
        }
Beispiel #3
0
        private object DeserializeRawCollectionItem(SettingsRawItem rawItem)
        {
            try
            {
                var itemType = TypeHelpers.GetTypeByName(rawItem.ItemType);
                var list     = (IList)typeof(List <>).MakeGenericType(itemType).GetConstructor(new Type[] { }).Invoke(null);

                foreach (var item in rawItem.ValuesCollection)
                {
                    list.Add(item);
                }

                return(list);
            }
            catch (Exception ex)
            {
                Logger.LogWarn(ex, "Can't deserialize collection.");

                return(null);
            }
        }
Beispiel #4
0
        protected SettingsManagerSection LoadSection(string name, XPathNodeIterator iter)
        {
            var rawData = new List <SettingsRawItem>();

            while (iter.MoveNext())
            {
                try
                {
                    var rawItem = new SettingsRawItem()
                    {
                        Name         = iter.Current.GetAttribute("name", ""),
                        Type         = iter.Current.GetAttribute("type", ""),
                        IsCollection = bool.Parse(iter.Current.GetAttribute("isCollection", ""))
                    };

                    if (!rawItem.IsCollection)
                    {
                        rawItem.Value = iter.Current.Value;
                    }
                    else
                    {
                        rawItem.ItemType = iter.Current.GetAttribute("itemType", "");

                        var collectionIter = iter.Current.Select("collectionItem");
                        while (collectionIter.MoveNext())
                        {
                            rawItem.ValuesCollection.Add(collectionIter.Current.Value);
                        }
                    }

                    rawData.Add(rawItem);
                }
                catch (Exception ex)
                {
                    Logger.LogWarn("Can't parse settings item value: " + ex.Message);
                }
            }

            return(new SettingsManagerSection(name, _settingsManager, this, rawData));
        }
Beispiel #5
0
        public object DeserializeRawItem(SettingsRawItem rawItem)
        {
            if (rawItem.IsCollection)
            {
                return(DeserializeRawCollectionItem(rawItem));
            }

            var type = TypeHelpers.GetTypeByName(rawItem.Type);

            if (type == null)
            {
                return(null);
            }

            if (type == typeof(byte))
            {
                return(byte.Parse(rawItem.Value));
            }
            if (type == typeof(int))
            {
                return(int.Parse(rawItem.Value));
            }
            if (type == typeof(long))
            {
                return(long.Parse(rawItem.Value));
            }
            if (type == typeof(double))
            {
                return(double.Parse(rawItem.Value));
            }
            if (type == typeof(float))
            {
                return(float.Parse(rawItem.Value));
            }
            if (type == typeof(DateTime))
            {
                return(DateTime.ParseExact(rawItem.Value, "s", null));
            }
            if (type == typeof(bool))
            {
                return(bool.Parse(rawItem.Value));
            }
            if (type == typeof(string))
            {
                return(rawItem.Value);
            }
            if (type == typeof(char))
            {
                return(rawItem.Value[0]);
            }

            if (type == typeof(byte?))
            {
                return(rawItem.Value != null ? new byte?(byte.Parse(rawItem.Value)) : null);
            }
            if (type == typeof(int?))
            {
                return(rawItem.Value != null ? new int?(int.Parse(rawItem.Value)) : null);
            }
            if (type == typeof(long?))
            {
                return(rawItem.Value != null ? new long?(long.Parse(rawItem.Value)) : null);
            }
            if (type == typeof(double?))
            {
                return(rawItem.Value != null ? new double?(double.Parse(rawItem.Value)) : null);
            }
            if (type == typeof(float?))
            {
                return(rawItem.Value != null ? new float?(float.Parse(rawItem.Value)) : null);
            }
            if (type == typeof(DateTime?))
            {
                return(rawItem.Value != null ? new DateTime?(DateTime.ParseExact(rawItem.Value, "s", null)) : null);
            }
            if (type == typeof(bool?))
            {
                return(rawItem.Value != null ? new bool?(bool.Parse(rawItem.Value)) : null);
            }
            if (type == typeof(char?))
            {
                return(rawItem.Value != null ? new char?(rawItem.Value[0]) : null);
            }

            if (type.TryGetTypeConverter(out var typeConverter))
            {
                return(typeConverter.ConvertFromString(rawItem.Value));
            }

            return(null);
        }