Как привязать конфигурацию к массиву объектов JSON .Net Core - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь привязать файл JSON к модели для параметров конфигурации в проекте ядра dotnet.

JSON выглядит так:

"Settings": {
  "Values": [
  { "Value1": "1" },
  { "Value2": "2" }
]}

Моя модель выглядит следующим образом:

public class Settings
{
    public List<Value> Values{ get; set; }
}

public class Value
{
    public string Value1 { get; set; }

    public string Value2 { get; set; }
}

Я связываю со следующим:

var settings = _configuration.GetSection("Settings").Get<Settings>();

Но в результате settings содержит два Value объекта в списке - первый Value объект имеет Value1 = 1& Value2 = null, а второй Value объект имеет Value1 = null & Value2 = 2.Как связать так, чтобы settings имел только один Value объект в Values с заполненными обоими свойствами?

Это не то, что предлагается здесь: https://stackoverflow.com/questions/51488845/how-to-read-a-string-array-in-appsettings-json

Это связано с тем, что каждый объект в массиве в этом случае имеет разные свойства, тогда как в предложенном дубликате все объекты согласованы.

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Самый простой способ получить ваши значения, возможно, сделать так, чтобы ваш класс выглядел следующим образом:

public class Settings
{
    public Dictionary<string, string>[] Values{ get; set; }
}

Это будет проанализировано как Array из Dictionary элементов, где каждый элемент будет содержать только1 значение ключа ваших значений.

ОБНОВЛЕНИЕ:

Вы можете добавить функцию в свой класс Settings, чтобы получить все настройки в виде 1 словаря:

public Dictionary<string, string> GetSettings()
{
    var settingsValues = new Dictionary<string, string>();
    foreach (var valueDict in Values)
    {
        foreach (var setting in valueDict)
        {
            settingsValues.Add(setting.Key, setting.Value);
        }
    }
    return settingsValues;
}
0 голосов
/ 28 мая 2019

Хорошо, так что на самом деле он должен выглядеть следующим образом:

public class Settings
{
    public List<Dictionary<string, string>> Values{ get; set; }
}

Поскольку JSON Values на самом деле является массивом словарей.

Для того, чтобы сработало следующее:

public class Settings
{
    public Dictionary<string, string> Values{ get; set; }
}

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

"Settings": {
    "Values": {    
        "Value1": "1",
        "Value2": "2"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...