/// <summary> /// Create a live settings store attached to a settings file. /// </summary> /// <param name="path"></param> /// <returns></returns> public static SettingsStore <T> Create(string path) { var document = new XmlDocument(); var directory = Path.GetDirectoryName(path); var file = Path.GetFileName(path); var watcher = new FileSystemWatcher(directory, file); try { var xml = File.ReadAllText(path, _xmlEncoding); document.LoadXml(xml); } catch { // Errors can be ignored. document = new XmlDocument(); document.LoadXml("<" + typeof(T).Name + "/>"); } T settings; try { settings = SettingsSerializer.FromXmlDocument <T>(document); } catch { settings = SettingsSerializer.CreateDefault <T>(); } var store = new SettingsStore <T>(document, settings, path, watcher); return(store); }
/// <summary> /// Create store from an xml string. /// </summary> /// <param name="xmlString">The XML.</param> /// <returns>The object managing the settings.</returns> public static SettingsStore <T> CreateFromXml(string xmlString) { var document = new XmlDocument(); document.LoadXml(xmlString); var settings = SettingsSerializer.FromXmlDocument <T>(document); var store = new SettingsStore <T>(document, settings); return(store); }
void OnFileChanged(object sender, FileSystemEventArgs e) { XmlDocument document; try { var newContent = File.ReadAllText(_path); document = new XmlDocument(); document.LoadXml(newContent); } catch { document = null; } if (document != null) { SettingsSerializer.MergeXmlDocument(document, _settings); _document = document; Changed?.Invoke(this, EventArgs.Empty); } }
internal void SetPropertyValue(string name, object value) { var property = GetProperty(name); SettingsSerializer.SetProperty(property, Settings, value); }
/// <summary> /// Reset content to default. /// </summary> public void Reset() { SettingsSerializer.ResetDefault(_settings); Changed?.Invoke(this, EventArgs.Empty); }
public override void Serialize(string name, ValueNudgerFactory factory) { var property = GetProperty(name); var attribute = _element.Attributes[name]?.Value; if (attribute == null) { var elements = _element.GetElementsByTagName(name); if (elements.Count != 0) { attribute = elements[0].InnerText; while (elements.Count != 0) { _element.RemoveChild(elements[0]); } } } if (attribute != null) { object value; try { var propertyType = property.PropertyType; if (propertyType.IsAssignableFrom(typeof(string))) { value = attribute; } else if (propertyType.IsAssignableFrom(typeof(int))) { value = int.Parse(attribute); } else if (propertyType.IsAssignableFrom(typeof(double))) { value = double.Parse(attribute); } else if (propertyType.IsAssignableFrom(typeof(float))) { value = float.Parse(attribute); } else if (propertyType.IsAssignableFrom(typeof(bool))) { value = bool.Parse(attribute); } else if (propertyType.IsEnum) { value = Enum.Parse(propertyType, attribute); } else { value = new NotImplementedException("Property type not implemented"); } } catch { // Value didn't parse, stick with default value. value = null; } if (value != null) { SettingsSerializer.SetProperty(property, Settings, value); } } }