使用ConfigurationBuilder时,是否可以设置自定义绑定?

问题描述 投票:0回答:1

手动配置接线的相当标准的程序

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);
c# .net-6.0 appsettings
1个回答
0
投票

您可以使用 [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 }
© www.soinside.com 2019 - 2024. All rights reserved.