【问题标题】:Is there a built in way to serialize array configuration values?是否有内置的方法来序列化数组配置值?
【发布时间】:2015-07-22 14:42:51
【问题描述】:

我正在进行一个新的 ASP.NET 5 项目。

我正在尝试读取存储在我的config.json 文件中的数组值,如下所示:

{
  "AppSettings": {
    "SiteTitle": "MyProject",
    "Tenants": {
      "ReservedSubdomains": ["www", "info", "admin"]
    }
  },
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-MyProject....."
    }
  }
}

如何从我的 C# 代码中访问它?

【问题讨论】:

  • 仅供参考...您可以使用称为“粘贴为 JSON 类”的 VS 功能(可能是 VS 2013 起),它将从剪贴板中复制的 json 生成 C# 类..这会给你一个起点,您可以根据需要修改类
  • @KiranChalla,显然我不想复制粘贴,我想保持我的代码干净和软编码。
  • 不确定你的意思,我不是说马上使用生成的代码……你可以根据需要修改它,但要记住反序列化语义……
  • @KiranChalla 它必须在运行时以编程方式完成,而不是在设计时。

标签: c# visual-studio-2015 asp.net-core-mvc config.json


【解决方案1】:

config.json 至少不支持 beta4 数组。见ASP.NET issue 620。但是您可以使用以下config.json

"AppSettings": {
  "SiteTitle": "MyProject",
  "Tenants": {
    "ReservedSubdomains": "www, info, admin"
  }
}

并将其映射到这样的类:

public class AppSettings
{
  public string SiteTitle { get; set; }
  public AppSettingsTenants Tenants { get; set; } = new AppSettingsTenants();
}

public class AppSettingsTenants
{
  public string ReservedSubdomains { get; set; }
  public List<string> ReservedSubdomainList
  {
     get { return !string.IsNullOrEmpty(ReservedSubdomains) ? ReservedSubdomains.Split(',').ToList() : new List<string>(); }
  }
}

然后可以将其注入控制器:

public class MyController : Controller
{
  private readonly AppSettings _appSettings;

  public MyController(IOptions<AppSettings> appSettings)
  {
     _appSettings = appSettings.Options;
  }

【讨论】:

  • 是的,这正是我最终的结果,但我更喜欢我的代码尽可能干净,这里正确的选择是数组。你看过this的公告了吗?
  • 酷。听起来它将在 beta5 中可用。现在我正在解决如上所示的限制。
  • @jitrem,顺便说一句,既然我看到你是 AppSettings 大师,请查看我的other question,我相信你会有什么要补充的。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2020-05-06
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2020-11-11
  • 2015-10-24
相关资源
最近更新 更多