2015-07-22 2 views
2

Я нахожусь в новом проекте ASP.NET 5.Есть ли встроенный способ сериализации значений конфигурации массива?

Я пытаюсь прочитать значение массива, хранящееся в моем config.json файле, который выглядит следующим образом:

{ 
    "AppSettings": { 
    "SiteTitle": "MyProject", 
    "Tenants": { 
     "ReservedSubdomains": ["www", "info", "admin"] 
    } 
    }, 
    "Data": { 
    "DefaultConnection": { 
     "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-MyProject....." 
    } 
    } 
} 

Как получить доступ это от моих C# код?

+0

Just FYI .. .Вы можете использовать функцию VS (вероятно, VS 2013 года), называемую «Вставить как классы JSON», которая будет генерировать классы C# из скопированного json в вашем буфере обмена. Это даст вам отправную точку, и вы можете изменить классы, поскольку вы может понравиться –

+0

@KiranChalla, очевидно, я не хочу копировать вставку, я хочу, чтобы мой код был чистым и мягким. – Shimmy

+0

Не уверен, что вы имели в виду, я не хотел просто использовать сгенерированный код сразу ... вы можете изменить его, как вам может понадобиться, но не забывайте о семантике десериализации. –

ответ

2

По крайней мере, с бета-4 массивами не поддерживаются в config.json. См. ASP.NET issue 620. Но вы можете использовать следующие config.json:

"AppSettings": { 
    "SiteTitle": "MyProject", 
    "Tenants": { 
    "ReservedSubdomains": "www, info, admin" 
    } 
} 

и отобразить его в класс, как это:

public class AppSettings 
{ 
    public string SiteTitle { get; set; } 
    public AppSettingsTenants Tenants { get; set; } = new AppSettingsTenants(); 
} 

public class AppSettingsTenants 
{ 
    public string ReservedSubdomains { get; set; } 
    public List<string> ReservedSubdomainList 
    { 
    get { return !string.IsNullOrEmpty(ReservedSubdomains) ? ReservedSubdomains.Split(',').ToList() : new List<string>(); } 
    } 
} 

Это может быть введен в контроллер:

public class MyController : Controller 
{ 
    private readonly AppSettings _appSettings; 

    public MyController(IOptions<AppSettings> appSettings) 
    { 
    _appSettings = appSettings.Options; 
    } 
+0

Да, именно так я и закончил, но я предпочитаю, чтобы мой код был как можно более чистым, и правильный выбор здесь - массив. Вы прочитали объявление [this] (https://github.com/aspnet/Announcements/issues/33)? – Shimmy

+0

прохладный. похоже, что он будет доступен в бета5. На данный момент я работаю над ограничением, как показано выше. – jltrem

+0

@jitrem и BTW, так как я вижу, что вы гуру AppSettings, посмотрите мой [другой вопрос] (http://stackoverflow.com/q/31563575/75500), я уверен, что у вас будет, что Добавить. – Shimmy