Сложный объект ServiceStack и .NET Core AppSettings

#servicestack

#servicestack

Вопрос:

Я использую это из документов (https://docs.servicestack.net/host-configuration ), чтобы загрузить мой appsettings.json в ServiceStack:

 AppSettings = new NetCoreAppSettings(Configuration)
  

У моего appsettings.json есть эта строка:

 "test": [ "a", "b" ]
  

Однако, когда я делаю var allSettings = AppSettings.GetAll(); и ищу свой ключ, test это null .

Я знаю.NET Core поддерживает список / словарь только с помощью .Bind(), и это работает:

 List<string> test = new List<string>();
Configuration.GetSection("test").Bind(test);
  

Поскольку в ServiceStack есть такие методы, как GetList , GetDictionary и даже Get<T> , я предполагаю, что я что-то делаю неправильно, поскольку это не работает.

Ответ №1:

Все поставщики приложений ServiceStack десериализуют строковые скалярные значения, используя формат JSV, поэтому, если вы хотите использовать его GetList() или Get<T> свою конфигурациюappsettings.json, она должна выглядеть следующим образом:

 "test": "a,b,c"
  

Или

 "test": "[a,b,c]"
  

Который вы можете разрешить из:

 var test = AppSettings.GetList("test"); // or
var test = AppSettings.Get<List<string>>("test");
  

Комментарии:

1. AppSettings.Get<List<string>>() Работает отлично. Даже при экранировании CSV (в соответствии со спецификацией JSV), поскольку мои реальные данные имеют запятые: «LdapGroups»: «[«cn=something1,ou=Group,o=mycompany.com,cn=XXX»,»cn=something2,ou=Group,o=mycompany.com,cn=XXX»]» ` но, к вашему сведению, GetList работает не так хорошо, как "[ one,two, three ]" в appsettings.json, который дает "[ one" "two" " three ]" . Моя проблема в любом случае решена.