如何从包含集合的 appsettings.json 中读取单个值

问题描述 投票:0回答:1

如何从下面显示的 appsettings.json 文件中读取 URL 值?

{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://localhost:1234"
        }
      }
    ]
  }
}

我尝试了下面的代码片段,但它给出了 null。

var configurationBuilder = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: false)
    .AddJsonFile($"appsettings.{environmentName}.json", optional: true)
    .AddEnvironmentVariables();

IConfiguration _configuration = configurationBuilder.Build();
// 1st attempt
var url = _configuration.GetSection("Serilog").GetChildren().First()["Args::serverUrl"];
// 2nd attempt
var url = _configuration.GetValue<string>("Serilog:WriteTo:Args::serverUrl");
// 3rd attempt
var url = _configuration.GetSection("Serilog").GetChildren().First().GetSection("Args").GetValue("serverUrl");

这些尝试都没有成功。

存在一些类似的问题,但没有一个涉及从集合中获取单个值。

c# appsettings
1个回答
0
投票
namespace BlazorApp
{
    public class Args
    {
        public string ServerUrl { get; set; }
    }

    public class WriteToConfig
    {
        public string Name { get; set; }
        public Args Args { get; set; }
    }

    public class SerilogConfig()
    {
        public Dictionary<string, List<WriteToConfig>> Serilog { get; set; }
    }

    public class Serilogg
    {
    }
}

Programm.cs:

var config = JsonConvert.DeserializeObject<BlazorApp.SerilogConfig>(File.ReadAllText("appsettings.json"), serializerSettings);
string serverUrl = config?.Serilog?["WriteTo"]?[0]?.Args?.ServerUrl;

appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
    "Serilog": {
      "WriteTo": [
        {
          "Name": "Seq",
          "Args": {
            "serverUrl": "http://localhost:1234"
          }
        }
      ]
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.