public override object?ReadJson(JsonReader reader, Type objectType, object?existingValue, JsonSerializer serializer) { try { existingValue ??= _settingsFormat.FindExistingValue(reader.Path); if (existingValue is null) { return(null); } var wrapper = new SelectedIndexWrapper(existingValue); var token = JToken.Load(reader); wrapper.SelectedIndex = int.TryParse(token["SelectedIndex"].ToString(), out var res) ? res : wrapper.SelectedIndex; } catch (Exception e) { _logger.LogError(e, "Error while deserializing Dropdown"); } return(existingValue); }
public MCMGlobalSettingsContainer(IBUTRLogger <MCMGlobalSettingsContainer> logger) { IEnumerable <GlobalSettings> GetGlobalSettings() { foreach (var assembly in AccessTools2.AllAssemblies().Where(a => !a.IsDynamic)) { IEnumerable <GlobalSettings> settings; try { settings = AccessTools2.GetTypesFromAssemblyIfValid(assembly) .Where(t => t.IsClass && !t.IsAbstract) .Where(t => t.GetConstructor(Type.EmptyTypes) is not null) .Where(t => typeof(GlobalSettings).IsAssignableFrom(t)) .Where(t => !typeof(EmptyGlobalSettings).IsAssignableFrom(t)) .Where(t => !typeof(IWrapper).IsAssignableFrom(t)) .Select(t => Activator.CreateInstance(t) as GlobalSettings) .OfType <GlobalSettings>() .ToList(); } catch (TypeLoadException ex) { settings = Array.Empty <GlobalSettings>(); logger.LogError(ex, "Error while handling assembly {Assembly}!", assembly); } foreach (var setting in settings) { yield return(setting); } } } foreach (var setting in GetGlobalSettings()) { logger.LogTrace("Registering settings {type}.", setting.GetType()); RegisterSettings(setting); } }
private void LoadSettings() { IEnumerable <PerCampaignSettings> GetPerCampaignSettings() { foreach (var assembly in AccessTools2.AllAssemblies().Where(a => !a.IsDynamic)) { IEnumerable <PerCampaignSettings> settings; try { settings = AccessTools2.GetTypesFromAssemblyIfValid(assembly) .Where(t => t.IsClass && !t.IsAbstract) .Where(t => t.GetConstructor(Type.EmptyTypes) is not null) .Where(t => typeof(PerCampaignSettings).IsAssignableFrom(t)) .Where(t => !typeof(EmptyPerCampaignSettings).IsAssignableFrom(t)) .Where(t => !typeof(IWrapper).IsAssignableFrom(t)) .Select(t => Activator.CreateInstance(t) as PerCampaignSettings) .OfType <PerCampaignSettings>() .ToList(); } catch (TypeLoadException ex) { settings = Array.Empty <PerCampaignSettings>(); _logger.LogError(ex, "Error while handling assembly {Assembly}!", assembly); } foreach (var setting in settings) { yield return(setting); } } } foreach (var setting in GetPerCampaignSettings()) { RegisterSettings(setting); } }