将配置绑定到复杂对象
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
在 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