Конфигурация json с параметрами вместе с DI .NET

У меня возникла проблема при конфигурировании приложения с использованием внедрения зависимостей и IOptions<T>. У программы есть конфиг с пользовательскими настройками. Для редактирования настроек пользователь может использовать саму программу, но я допускаю, что любознательный пользователь может хотеть открыть сам файл конфигурации. Для этого я стараюсь поддерживать его в красивом виде. Чтобы это сделать, нужно использовать некоторые опции и атрибуты. К примеру, сериализация перечислений в виде именований, а не значений. Для этого требуется использовать JsonStringEnumConverter, но поставщик конфигурации json видимо это делает за меня. Было бы всё отлично, но с .NET 9 пришла возможность задавать иные имена полям перечисления для сериализации. Для этого был добавлен JsonStringEnumMemberNameAttribute, который поставщик конфигураций json видимо не использует и из-за чего я не могу сделать конфиги еще краше. Мне кажется, что для решения проблемы нужно писать свой поставщик. Может быть я что-то упускаю и у кого-то есть более элегантное решение?

UPD: Небольшой пример о чём идет речь. Есть у меня модель с одним свойством типа перечисления. Объект модели сериализую в json и сохраняю в файл, после чего, когда пытаюсь загрузить эту конфигурацию, то хаваю эксепшен.

[Flags]
public enum Sport
{
    [JsonStringEnumMemberName("None")]
    None = 0,
    [JsonStringEnumMemberName("Football")]
    Football = 1,
    [JsonStringEnumMemberName("Basketball")]
    Basketball = 2,
    [JsonStringEnumMemberName("Ping-Pong")]
    PingPong = 4,
    [JsonStringEnumMemberName("Race-Walking")]
    RaceWalking = 8,
    [JsonStringEnumMemberName("Greco-Roman-Wrestling")]
    GrecoRomanWrestling = 16,
}

...

internal sealed partial class App : Application
{
    private readonly IHost _host;

    public App()
    {
        HostApplicationBuilder builder = Host.CreateApplicationBuilder();
        builder.Configuration.AddJsonFile(FullPath.UserSettings, false, true);
        _host = builder.Build();
        _host.RunAsync();
...

Далее сохраняю конфигурацию со следующими параметрами:

JsonSerializerOptions jsonSerializerOptions = new()
{
    WriteIndented = true,
    Converters =
    {
        new JsonStringEnumConverter()
    },
    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
};

В том случае, если имею модель:

public class Player
{
    public Sport Sports { get; set; }
}

Получаю следующий примерный файл:

{
    "Player": {
        "Sports": "Football, Ping-Pong, Greco-Roman-Wrestling"
    }
}

После чего при загрузки данных получаю эксепшен. Мне кажется, нужно реализовать свой поставщик, чтобы можно было передать ему параметры сериализации, если, конечно, так можно.


Ответы (0 шт):