2015-08-07 13 views
7

Ho appena installato ASP.NET 5 e creato un'applicazione console in Visual Studio. Ho aggiunto un file, config.json, alla cartella principale del progetto.Come leggere i valori da config.json nell'applicazione console

Ecco come si presenta:

{ 
"Data": { 
    "TargetFolderLocations": { 
     "TestFolder1": "Some path", 
     "TestFolder2": "Another path" 
    } 
} 

}

mio Program.cs si presenta così

Come posso accedere alla chiave TargetFolderLocations con il codice?

+0

E ''Data.TargetFolderLocations'? – Hogan

+0

Non funziona con .TargetFolderLocations sfortunatamente ... – JOSEFtw

+0

Sono riuscito a risolverlo, per favore vedi la mia risposta :) – JOSEFtw

risposta

3

avere un tipo come la seguente:

public class FolderSettings 
{ 
    public Dictionary<string, string> TargetFolderLocations { get; set; } 
} 

È possibile quindi utilizzare il ConfigurationBinder per associare automaticamente le sezioni di configurazione per i tipi come sopra . Esempio:

var folderSettings = ConfigurationBinder.Bind<FolderSettings>(config.GetConfigurationSection("Data")); 
var path = folderSettings.TargetFolderLocations["TestFolder1"]; 
+0

questo è veramente pulito, ho dovuto legarlo in precedenza, ma penso che la sintassi sia cambiata e non ho trovato alcuna documentazione ... lo proveremo e lo accetteremo come risposta corretta se funziona! – JOSEFtw

0

È possibile utilizzare JavascriptSerializer (spazio dei nomi: System.Web.Extension) per analizzare json nel dizionario e trovare qualsiasi valore in base alla relativa chiave da json. È il codice sarebbe diventato:

string json = System.IO.File.ReadAllText("PathToJsonFile"); 
JavaScriptSerializer serializer = new JavaScriptSerializer(); 
Dictionary<string, object> dic = serializer.Deserialize<Dictionary<string, object>>(json); 

Se eseguire iterazioni su dizionario, è possibile vedere tutte le chiavi e ottenere i loro valori utilizzando dic.

* Basta una soluzione alternativa *

2

Il modo in cui hai formulato la tua domanda, il file config.json è alla base del progetto, ma siete alla ricerca nella directory di file eseguibile in fase di esecuzione. Supponendo che tu lo stia facendo da Visual Studio e supponendo che non copi il file di configurazione al momento della compilazione, è probabilmente bin\Debug e il file non è lì.

È possibile impostare le proprietà di config.json su Copy always da Esplora soluzioni, per assicurarsi che il file arrivi.

+2

Questo non è più il caso. In VS 2015 con gli strumenti .NET Core 1.0 installati non hai più questa opzione. Invece, aggiungilo all'interno di "buildOptions" in project.json: "copyToOutput": [ "config.json" ] – ScottRFrost

+0

@ScottRFrost grazie. Finalmente ho avviato la mia applicazione per console. –

2

sono riuscito a risolvere in questo modo:

public class Program 
{ 
    public IConfiguration Configuration { get; set; } 
    public Dictionary<string,string> Paths { get; set; } 
    public Program(IApplicationEnvironment app, 
      IRuntimeEnvironment runtime, 
      IRuntimeOptions options) 
    { 
     Configuration = new ConfigurationBuilder() 
      .AddJsonFile(Path.Combine(app.ApplicationBasePath, "config.json")) 
      .AddEnvironmentVariables() 
      .Build(); 
    } 

    public void Main(string[] args) 
    { 
     var pathKeys = Configuration.GetConfigurationSections("TargetFolderLocations"); 
     foreach (var pathItem in pathKeys) 
     { 
      var tmp = Configuration.Get($"TargetFolderLocations:{pathItem.Key}"); 
      Paths.Add(pathItem.Key, tmp); 
     } 

     return; 
    } 
+1

Grazie JOSEFtw. È necessario inizializzare la variabile del dizionario "Percorsi" altrimenti si otterrà un'eccezione NULL. – Kwex