非常标准的手动配置接线程序

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 }

Csharp相关问答推荐

利用.NET 8中的AddStandardResilienceDeliveries和AddStandardHedgingDeliveries实现Resiliency

C#相同名称的枚举方法和normal方法,参数类型不同

EF Core 8—应用客户端投影后无法转换集操作

如何在C#中使用正则表达式抓取用逗号分隔的两个单词?

AsNoTrackingWithIdentitySolutions()似乎不起作用?

从应用程序图API调用访问所有者字段

Blazor EventCallback<;MyType<;T>;>;

如何将不同类型的扩展参数的javascript函数转换成C#风格?

如何将MongoDB序列化程序设置为内部对象属性

从另一个不同 struct 的数组创建Newtonsoft.Json.Linq.J数组

交替的奇数

当空判断结果赋给变量时,为什么会出现可能空异常警告的解引用?

我什么时候应该在Dapper中使用Connection.OpenAsync?

单元测试类型为HttpClient with Microsoft.Extensions.Http.Resilience

ASP.NET MVC数据批注验证组复选框

使用C#12中的主构造函数进行空判断

C#中COM对象的实际地址

Cmd中的&ping.end()";有时会失败,而";ping";总是有效

如何根据分割文本的块数来计算文本的大小?

Windows 10上埃及标准时间的时区偏移不正确