.NET 5.0 选项模式使用 JSON 数组

.NET 5.0 options pattern using JSON array

我正在构建一个 C# .NET 5.0 应用程序来与外部 API 对话,我们有多个帐户可以 post 向其发送数据。我正在尝试将这些详细信息存储在 appsettings.json 文件中并使用选项模式来检索设置。

我的应用程序中有以下结构 settings.json

"SomeApi": {
    "Url": "https://api.someapi.net/v3/",
    "Secret": "mysecretvlaue",
    "ClientId": "myclientid",
    "Accounts": [
      {
          "Name": "Bob",
          "Username": "HisUsername",
          "Password": "HisPassword",
          "PostingLocation": "HisLocation"
      },
      {
          "Name": "Fred",
          "Username": "HisUsername",
          "Password": "HisPassword",
          "PostingLocation": "HisLocation"
      }
    ]
  },

我有一个 class 设置如下:

public class SomeApiOptions
    {
        public const string SomeApi = "SomeApi";
   
        public string Url { get; set; }
        public string Secret { get; set; }
        public string ClientId { get; set; }

        public List<Account> Accounts { get; set; }
    }
    public class Account
    {
        string Name { get; set; }
        string Username { get; set; }
        string Password { get; set; }
        string PostingLocation { get; set; }
    }

我的 startup.cs 有这个:

services.Configure<SomeApiOptions>(Configuration.GetSection(SomeApiOptions.SomeApi));

最后,我将 IOptions 注入到 class 中,我需要像这样使用设置:

Public MyClass (IOptionsSnapshot<SomeApiOptions> options)

我遇到的问题是 Accounts 永远不会填充各自的值。 UrlSecret 等已填充,Accounts 列表中的元素项数正确,但所有属性都具有空值。

我查看了类似的问题并尝试以几种方式重构我的 JSON,但仍然以空值结束。

非常感谢任何帮助。

我发现这里有几个问题。

首先,Account class 中的 none 个属性是 public,因此您需要更改它:

其次,Location 属性 与 JSON 不匹配,即 PostingLocation。您的 class 应该是:

public class Account
{
    public string Name { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string PostingLocation { get; set; }
}