【问题标题】:.NetCore - Get Arrays from JSON file.Net Core - 从 JSON 文件中获取数组
【发布时间】:2021-05-29 06:05:14
【问题描述】:

我需要从 asp.net 核心的 configuration.json 文件中获取数组。 我创建了一个从配置文件中获取部分的 API,但我什么也没得到。 请帮我找出答案! 这是configuration.json文件。

"Settings": {
    "Standards": [ "LKG", "UKG", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "COL" ],
    "PaymentModes": [ "CASH", "DD", "TRANSFER", "RTGS", "NEFT", "CC", "NB" ],
    "FeeTypes": [ "SCHOOL FEE", "HOSTEL FEE", "TRANSPORTATION FEE", "WELCOME PACK FEE", "TOUR FEE", "COACHING FEE", "OTHER FEE" ],
    "Installments": [ "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X" ],
    "FinancialInstitutes": ["FEDERAL","ICICI","PAYU","AXIS","AXISRTGS","PAYTM"]
  }

这里是 api。

[HttpGet]
    [AllowAnonymous]
    [Route("Settings")]
    public List<string> GetSettings()
    {
        var settings = Configuration.GetSection("Settings").Get<List<string>>();
        return settings;
    }

这里是启动类。

 public class Startup
    {
        private readonly string _contentRootPath;
        public IWebHostEnvironment env;
        public IConfiguration Configuration { get; }
        public Startup(IWebHostEnvironment env)
        {
            _contentRootPath = env.ContentRootPath;

            var builder = new ConfigurationBuilder()
               .SetBasePath(env.ContentRootPath)
               .AddJsonFile("configuration.json", optional: true, reloadOnChange: true)
               .AddJsonFile($"configuration.{env.EnvironmentName}.json", optional: true) 
               .AddEnvironmentVariables();
            this.Configuration = builder.Build();
            this.env = env;
         }
  public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<IConfigurationRoot>(provider => { return (IConfigurationRoot)Configuration; });  services.AddMvc()
            .AddControllersAsServices();
services.AddHttpContextAccessor();
       }
}

【问题讨论】:

  • 您正在尝试获取一维数组。但是在配置 json 中你有二维数组。尝试将 List 替换为 string[][] 或 List>

标签: c# asp.net-core .net-core configuration json.net


【解决方案1】:

首先,尝试创建一个类作为您的“设置”部分,例如:

public class Settings 
{
  public List<string> Standards {get; set;}
  public List<string> PaymentModes {get; set;}
  public List<string> FeeTypes {get; set;}
  public List<string> Installments {get; set;}
  public List<string> FinancialInstitutes {get; set;}
}

然后改变你的get方法如下:

public Settings GetSettings()
{
  var settings = new Settings();
  Configuration.Bind("Settings", settings)
  return settings;
}

【讨论】:

  • 我尝试并在响应中得到了空值。 { "Standards": null, "PaymentModes": null, "FeeTypes": null, "Installments": null, "FinancialInstitutes": null }
  • 您是否将 IConfiguration 注入到您的构造函数中?
  • 如果是,则尝试在设置类中将List&lt;string&gt;更改为string[]
【解决方案2】:

我在启动类中为配置提供了单例依赖,这很有效。 这就是问题所在。我刚刚修改了我的代码,其中首先获取所有键(数组),然后在 foreach 循环中,我通过键一个一个地获取数组的值。

public Dictionary<string, List<string>> GetSettings()
    {
        var response = new Dictionary<string, List<string>>();
        var settings = Configuration.GetSection("Settings").GetChildren().Select(x => x.Key).ToList();
        foreach (var setting in settings)
        {
            response.Add(setting, Configuration.GetSection($"Settings:{setting}").Get<List<string>>());
        }
        return response;
    }

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2023-04-03
    • 2020-09-09
    • 2019-07-21
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多