#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 ]"
. Моя проблема в любом случае решена.