Я использую Microsoft.Extensions.Config.Json
для привязки некоторых JSON данных конфигурации к классу.
Класс выглядит следующим образом:
public class MyOptions {
public string BuilderName { get; set; }
public IDictionary<string, object> BuilderParameters { get; set; }
}
Код привязки:
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
MyOptions options = new MyOptions();
config.Bind("MyOptions", options);
Все это прекрасно работает, если значения JSON являются простыми типами, такими как строки, целые числа или bools. Например:
"MyOptions": [
"BuilderName": "Test"
"BuildParameters": {
"A": true,
"B": "Test"
}
]
Однако, если JSON содержит массив, привязка полностью завершается ошибкой, и я просто получаю нулевой экземпляр:
"MyOptions": [
"BuilderName": "Test"
"BuildParameters": {
"A": true,
"B": [ "Test1", "Test2" ]
}
]
Я не понимаю, почему это потерпит неудачу. Я мог бы использовать разделенную запятыми строку или что-то, что затем анализировалось для создания массива в моем коде, но, похоже, это не нужно. Конечно, это то, чего я бы предпочел избежать, если это возможно.
Редактировать:
Одно из предложенных решений таково: Как сериализовать словарь как часть его родительского объекта, используя Json. Net
Здесь показано, как преобразовать группу пар * ключ / значение JSON в словарь. Мне нужно сделать это, когда значение в одной или нескольких парах ключ / значение представляет собой массив JSON и идет в словарь.
Я ожидаю, что массив будет преобразован в коллекцию (массив, список, не имеет значения) строк или объектов.