手动配置接线的相当标准的程序
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
然后我打电话
var procSettings = builder.GetSection(ProcessSettings.SectionName).Get<ProcessSettings>();
某些数据无法加载。我知道为什么 - 有些属性与 JSON 属性不匹配。我尝试用
[JsonPropertyName("captureTrace")]
来装饰它,认为微软会使用自己的绑定 (System.Text.Json.Serialization
)。但不是!他们真的使用属性名称而不检查属性吗?基本上,有没有办法做到这一点 - 属性名称与 JSON 属性名称不同?
我发现了最大
.Get<ProcessSettings>(x => new BinderOptions().BindNonPublicProperties = true);
您可以使用 [ConfigurationKeyName] 来装饰属性
例如:
public record class ProcessSettings
{
[ConfigurationKeyName("any name")]
public string CaptureTrace { get; set; }
}
appsettings.json:
{
"MyProcessSettings": {
"any name": "AnyValue"
}
}
测试:
using Microsoft.Extensions.Configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var setting = builder
.GetSection("MyProcessSettings")
.Get<ProcessSettings>();
Console.WriteLine(setting);
输出:
ProcessSettings { CaptureTrace = AnyValue }