В следующей документации показано, как использовать шаблон параметров в ASP. NET Core для создания строго типизированного класса параметров для доступа к JSON данным конфигурации.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options
Этот C# класс
public class MyOptions
{
public string Option1 { get; set; }
public int Option2 { get; set; }
}
представляет часть этого JSON файла конфигурации (первые два свойства root -уровня)
{
"option1": "value1_from_json",
"option2": -1,
"subOptions": {
"subOption1": "subvalue1_from_json",
"subOption2": 200
}
}
Я хочу добавить еще одно C# свойство с именем SubOptions в класс MyOptions , которое возвращает необработанные данные подсекции subOptions JSON. без создания строго типизированного класса для этого подраздела файла конфигурации JSON, но я не знаю, какой тип данных использовать (или вообще возможно ли это сделать).
Если Я использую string , я получаю ошибку времени выполнения при вызове service.Configure<MyOptions>(Configuration);
, говоря: System.InvalidOperationException: 'Невозможно создать экземпляр типа' System.String ', так как отсутствует публикация c Конструктор без параметров.
Если я использую o bject или dynamici c, я получаю другую ошибку времени выполнения, когда service.AddSingleton(cfg => cfg.GetService<IOptions<MyOptions>>().Value);
вызывается для регистрации экземпляра класса MyOptions, говоря: System.ArgumentNullException: 'Значение не может быть нулевым , Имя параметра: тип '
Если я использую JObject , я получаю {}
назад, когда получаю доступ к свойству SubOptions объекта MyOptions, который вводится в мой API-контроллер.
Я знаю, что могу преобразовать подраздел в строковое свойство JSON путем экранирования данных подраздела, но я хочу избежать обработки подраздела как строки, и вместо этого оставьте это как raw JSON.
Можно ли делать то, что я хочу делать? Есть ли тип данных, который работает с шаблоном параметров, который позволит мне получить доступ к подразделу JSON без необходимости создания строго типизированного класса?
* Для фона я пытается создать метод API-контроллера, который возвращает содержимое подраздела JSON клиенту API. Я хочу избежать использования строго типизированного класса для подраздела, чтобы файл конфигурации JSON можно было редактировать на сервере, добавляя новые свойства и значения в подраздел, который будет возвращен клиенту API, без обновления кода C# и повторного развертывания службы API. Другими словами, я хочу, чтобы подраздел «1069 *» был «Dynami c», и просто вытащил его и отправил клиенту. *