如何从控制台应用程序中的config.json读取值

时间:2015-08-07 20:13:18

标签: c# console-application asp.net-core

我刚刚安装了ASP.NET 5并在Visual Studio中创建了一个控制台应用程序。我已经将一个文件config.json添加到项目的根文件夹中。

看起来像这样:

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

我的Program.cs看起来像这样

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();
}

如何使用代码访问TargetFolderLocations密钥?

4 个答案:

答案 0 :(得分:4)

我设法解决了这个问题:

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;
    }

答案 1 :(得分:4)

有类似以下的类型:

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

然后,您可以使用ConfigurationBinder自动将配置部分绑定到上述类型。例如:

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

答案 2 :(得分:3)

您提出问题的方式,您的config.json文件位于项目的根目录中,但您在运行时查看可执行文件目录。假设您是从Visual Studio执行此操作,并假设您未在构建时复制配置文件,Environment.CurrentDirectory可能是bin\Debug,并且该文件不存在。< / p>

您可以从解决方案资源管理器中将config.json的属性设置为Copy always,以确保文件到达目的地。

答案 3 :(得分:1)

您可以使用JavascriptSerializer(namespace:System.Web.Extension)将json解析为字典,并根据json中的键找到任何值。您的代码将成为:

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

如果你遍历字典,你可以看到所有的键并使用dic获取​​它们的值。

*只是替代解决方案*