/// <summary> /// Deserialize the xml elements to PluginSettings put into the private settings dictionary. /// </summary> /// <param name="parentElement"></param> private void DeserializeSettings(XElement parentElement, DeserializeDefaultOptions options = null) { if (parentElement == null) { return; } var elements = parentElement.Elements() .Where(el => el.Name.LocalName != "client" && el.Name.LocalName != "encrypt"); foreach (var element in elements) { PluginSetting setting = new PluginSetting(this, element); if (!String.IsNullOrEmpty(setting.Key)) { if (this.settings.ContainsKey(setting.Key)) { throw new ArgumentException("Key already exists in settings.", setting.Key); } SetDefaultAttributes(setting, element, options); this.settings.Add(setting.Key, setting); } } }
/// <summary> /// Sets default attributes on the given setting. If the given element contains the attribute, then it is not overridden. /// </summary> /// <param name="setting">The setting to set the values for.</param> /// <param name="element">The xml element (used to check if the attribute exists).</param> /// <param name="options">The default options.</param> private void SetDefaultAttributes(PluginSetting setting, XElement element, DeserializeDefaultOptions options) { if (options == null) { return; } if (options.IsClientSetting) { var attribute = element.Attribute("client"); if (attribute == null) { setting.IsClientSetting = true; } } if (options.IsEncryptedValue) { var attribute = element.Attribute("encrypt"); if (attribute == null) { setting.IsEncryptedSetting = true; } } }