问题
I just installed ASP.NET 5 and created a Console Application in Visual Studio. I've added a file, config.json, to the root folder of the project.
It looks like this:
{
"Data": {
"TargetFolderLocations": {
"TestFolder1": "Some path",
"TestFolder2": "Another path"
}
}
}
My Program.cs looks like this
public void Main(string[] args)
{
var configurationBuilder = new ConfigurationBuilder(Environment.CurrentDirectory)
.AddJsonFile("config.json")
.AddEnvironmentVariables();
Configuration = configurationBuilder.Build();
//Doesn't work...null all the time
var test = Configuration.Get("Data:TargetFolderLocations");
Console.ReadLine();
}
How can I access the TargetFolderLocations key with code?
回答1:
Have a type like the following:
public class FolderSettings
{
public Dictionary<string, string> TargetFolderLocations { get; set; }
}
You can then use the ConfigurationBinder to automatically bind configuration sections to types like above. Example:
var folderSettings = ConfigurationBinder.Bind<FolderSettings>(config.GetConfigurationSection("Data"));
var path = folderSettings.TargetFolderLocations["TestFolder1"];
回答2:
I've managed to solve it like this:
public class Program
{
public IConfiguration Configuration { get; set; }
public Dictionary<string,string> Paths { get; set; }
public Program(IApplicationEnvironment app,
IRuntimeEnvironment runtime,
IRuntimeOptions options)
{
Paths = new Dictionary<string, string>();
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;
}
回答3:
The way you've worded your question, your config.json file is at the root of the project, but you're looking in the executable directory at runtime. Assuming you're doing this from Visual Studio, and assuming you're not copying the config file in at build time, Environment.CurrentDirectory is probably bin\Debug, and the file is not there.
You can set the properties of config.json to Copy always from Solution Explorer, to ensure the file gets there.
回答4:
You can use JavascriptSerializer (namespace: System.Web.Extension) to parse json into dictionary and find any value based on its key from json. You code would become:
string json = System.IO.File.ReadAllText("PathToJsonFile");
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = serializer.Deserialize<Dictionary<string, object>>(json);
If you iterate over the dictionary, you can see all the keys and get their values using dic.
* Just an alternate solution *
来源:https://stackoverflow.com/questions/31885912/how-to-read-values-from-config-json-in-console-application