В настоящее время я пишу службу API, которая использует функцию привязки из пространства имен Microsoft.Extensions.Configuration.Binder. Сейчас все работает, но у меня возник вопрос, как это сделать. У меня довольно простой базовый класс:
public class GracefulTimeoutConfigOptions
{
public Dictionary<string,GracefulTimeoutOptions> GracefulTimeoutOptions { get; set; }
}
json для этого выглядит примерно так:
{
"AppSettings": {
"Environment": "DEV",
"gracefulTimeoutOptions": {
"Base": {
"name": "Base",
"maxTimeOut": 45000,
"maxItems": 40,
"timeoutMatchingString": "Processing Request has timed out",
"processingSteps": {
"totalOverHead": {
"name": "TotalOverHead", //Caps IS IMPORTANT + this is REQUIRED step name to have in your base.
"constantValue": 150,
"scalingValuePerItem": 0,
"excluded": true
}
}
}
},
}
}
Обратите внимание на запятую, которую я добавил в конце, потому что без Это. Привязка к этому контракту не выполняется ... несмотря на совпадение содержимого с:
public class GracefulTimeoutOptions
{
public string Name { get; set; }
public int MaxTimeOut { get; set; }
public int MaxItems { get; set; }
public string TimeoutMatchingString { get; set; }
public Dictionary<string, ProcessingStepOptions> ProcessingSteps { get; set; }
}
Похоже, что секция конфигурации является только допустимым словарем (согласно связывателю / десериализатору), если есть более одного элемента внутри. Почему это так, это связано с какой-то спецификацией JSON? Это предназначено? Есть ли другой класс для использования, где может быть более одного элемента, но не всегда? Сразу после этого я предполагаю, что есть какое-то различие между объектом и словарем с одним элементом, который сделан внутренним, о котором я не знаю. Это уже работает, и больше нет проблем. Мне просто интересно, почему это сработало.