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