将配置绑定到复杂对象

Binding Configurations to a Complex Object

在 ASP.NET Core 2.2 中,我尝试将 JSON 对象的数组绑定到匹配的 C# 对象,但它没有正确绑定成员。 (剧透:测试 1 有效,测试 2 无效。)

在我的 appsettings.json 中,我有这个配置:

{
    "Test1": [
        "A",
        "B",
        "C"
    ],
    "Test2": [
        { "s": "A" },
        { "s": "B" },
        { "s": "C" }
    ]
}

它以一种非常标准的方式被拉入程序 class 的配置对象中,这种方式对我的所有其他目的都很有效。

public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
   .SetBasePath(Directory.GetCurrentDirectory())
   .AddJsonFile("appsettings.json",optional: false, reloadOnChange: true)
   .AddEnvironmentVariables()
   .Build();

在我的程序中,我创建了一个 class 匹配 Test2 数组中的对象。

public class Test2Class
{
    public string s;
}

最后,我像这样绑定它们:

List<string> test1 = new List<string>();
Program.Configuration.Bind("Test1", test1);
List<TestClass> test2 = new List<TestClass>();
Program.Configuration.Bind("Test2", test2);

当我检查结果时,这是我得到的:

test1 = ["A", "B", "C"]
test2 = [{s: null}, {s: null}, {s: null}]

我需要做哪些不同的事情才能正确绑定 Test2 数组?

TestClass.s 应该是 属性 而不是 field

public class TestClass {
    public string s { get; set; }
}

下面的例子也可以更方便的得到想要的类型

List<string> test1 = Program.Configuration.GetSection("Test1").Get<List<string>>();
List<TestClass> test2 = Program.Configuration.GetSection("Test2").Get<List<TestClass>>();

引用Bind hierarchical configuration data using the options pattern