c# - .NET Core 6,选项模式,如何从 appsettings 获取 json 对象数组

标签 c# asp.net-core .net-core

这个特殊的设置一直让我困惑。我在 .NET Core 6 上,所以所有的设置都没有了。我只剩下下面的代码(我认为)。我有一个 json 对象数组。我看到有人说这是一本字典,所以我试过了,但数组中的值没有填充。

我能够得到更简单的对象来填充它们的值。我也根据其他 SO 帖子尝试过这种模式,但没有成功。

我一直靠近,但没有雪茄 - 我做错了什么?

Appsettings.json:

"TimeSlotMenuIds": [
   {
      "FounderWallEvening": 900000000001136943
   },
   {
      "BravoClubEvening": 900000000001136975
   }
]

我的映射类:

 public class TimeSlotMenuIds 
 {
    public Dictionary<string, long> TimeSlotMenuId { get; set; }
 }

没有从我的 json 文件中填充值的东西:

 var test = _configuration.GetSection("TimeSlotMenuIds").Get<TimeSlotMenuIds[]>();
 var t2 = _configuration.GetSection("TimeSlotMenuIds").GetChildren();
    

最佳答案

您的 JSON 结构并不真正适合直接反序列化为字典,而是可以用作字典数组,例如Dictionary<string, long>[] .我确定您不希望这样,因此可以选择手动处理配置:

var test = Configuration.GetSection("TimeSlotMenuIds")
    .GetChildren()
    .ToDictionary(
        x => x.GetChildren().First().Key, 
        x => long.Parse(x.GetChildren().First().Value));

虽然我认为这是一个令人讨厌的 hack。相反,您应该将 JSON 修复为如下所示:

"TimeSlotMenuIds": {
  "FounderWallEvening": 900000000001136943,
  "BravoClubEvening": 900000000001136975
}

这将允许您这样做:

var test = Configuration.GetSection("TimeSlotMenuIds").Get<Dictionary<string, long>>();

关于c# - .NET Core 6,选项模式,如何从 appsettings 获取 json 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72339070/

相关文章:

c# - 是否可以将参数验证添加到 dontnetcore api 应用程序中的路径变量?

c# - 在响应 header 中传递非 ASCII 字符

security - 为什么不应该将密码保存在 ASP.NET Core 中的 appsettings.json 中?

.net - 更新 .NET Core 托管 bundle 需要重新启动 IIS?

c# - 如何在 .NET Core 中计算内部 yield (IRR)

c# - SQL 到 LINQ 的转换 C#

c# - IMAP 响应重复

c# - Entity Framework 代码优先中的数据库初始化

c# - 无法从另一个线程访问对象

asp.net-core - 如何将 AspNetCore 从 2.2.0 更新到 2.2.2