Сопоставить appsettings.json со словарем - PullRequest
1 голос
/ 04 ноября 2019

У меня есть следующая конфигурация

"Options": {
  "Host": "123",
  "UserName": "test",
  "Password": "test",
  "Files": [
    {
      "Key": "asd",
      "Value": {
        "HostLocation": "asd",
        "RemoteLocation": "asd"
      }
    }
  ]
}

И я пытаюсь привязать его к следующему объекту

public class Options
{
    public string Host { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public Dictionary<string, FileOptions> Files { get; set; }

    public class FileOptions
    {
        public string HostLocation { get; set; }
        public string RemoteLocation { get; set; }
    }
}

Проблема заключается в том, когда я пытаюсь связатьФайлы в словарь. Они не связываются. Я получаю ключ, сгенерированный со значением 1, а значение FileOptions генерируется со строковым значением по умолчанию.

Это мое сопоставление конфигурации.

_serviceCollection.Configure<SftpOptions>(_configuration.GetSection("Options"));

Что не так и как можноЯ сопоставляю настройку с классом Options.

1 Ответ

1 голос
/ 04 ноября 2019

Они не связаны. Я получаю ключ, сгенерированный со значением 1, а значение FileOptions генерируется со строковым значением по умолчанию.

Это правильно, поскольку Files является массивом в показанном JSON

  "Files": [
    {
      "Key": "asd",
      "Value": {
        "HostLocation": "asd",
        "RemoteLocation": "asd"
      }
    }
  ]

JSON должен выглядеть следующим образом для удовлетворения желаемого графа объекта

"Options": {
  "Host": "123",
  "UserName": "test",
  "Password": "test",
  "Files": {
      "asd": {
        "HostLocation": "asd",
        "RemoteLocation": "asd"
      },
      "someOtherKey" : {
        "HostLocation": "something",
        "RemoteLocation": "something"
      }
    }
  }
}
...