gpt4 book ai didi

ASP.NET IConfigurationSection 正在为 POCO 返回空对象

转载 作者:行者123 更新时间:2023-12-04 15:36:42 24 4
gpt4 key购买 nike

我查看了 StackOverflow 上发布的各种解决方案——许多都已过时。目的是使用 IConfigurationSection.Get 通过 JsonConfigurationExtensions 从 json 部分返回一个 POCO 对象。

最简单的情况:

IConfigurationBuilder builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostEnvironment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
IConfiguration configuration = builder.Build();
return configuration.GetSection("ServerConfiguration").Get<ServerConfiguration>();

还有一个嵌套的 POCO:

public class ServerConfiguration
{
public Authentication Authentication { get; internal set; }
}

public class Authentication
{
public DatabaseConfiguration UserDatabase { get; internal set; }
}

public class DatabaseConfiguration
{
public string ConnectionString { get; internal set; }

public string DatabaseName { get; internal set; }
}

结果是一个空对象。

为了在开始时“清理”我的代码,我实际上没有包含 set 属性声明,因为在以前的 Json 到 POCO 处理程序中不需要它。但是,即使在声明这些处理程序(通常是非公共(public)的)时,Json 文件处理的 ASP.NET 实现也总是返回 null,尽管从该部分中成功检索了各个 key 对。

最佳答案

答案隐藏在 ASP.NET 论坛的回复中: https://github.com/aspnet/Configuration/issues/394#issuecomment-444683884

由此产生的代码更改:

1) 确保有一个集合处理程序的声明(内部的、 protected 、私有(private)的)。
2) 指定 BindOptions => BindNonPublicProperties。

return configuration.GetSection("ServerConfiguration")
.Get<ServerConfiguration>(c => c.BindNonPublicProperties = true);

关于ASP.NET IConfigurationSection 正在为 POCO 返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59517089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com