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