gpt4 book ai didi

c# - 配置 GetSection 返回对象部分的空值

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:03 29 4
gpt4 key购买 nike

你好,我在 .NET Core 应用程序 中使用了一个 json 配置文件,我不明白为什么我为对象的子部分获取了 null 值:

{
"tt": {
"aa":3,
"x":4
},
"Url":333,
"Config": {
"Production": {
"RedisAddress": {
"Hostname": "redis0",
"Port": 6379
},
"OwnAddress": {
"Hostname": "0.0.0.0",
"Port": 9300
}
},
"Dev": {
"RedisAddress": {
"Hostname": "redis0",
"Port": 6379
},
"OwnAddress": {
"Hostname": "0.0.0.0",
"Port": 9300
},
"Logger": "logger.txt"
}
}
}

当我尝试 GetSection("Config")GetSection("tt") 时,我得到值 null。但是它返回原始类型的值,例如在我的例子中 Url

有趣的是,如果我查看 configuration.Providers[0].Data 内部,我会看到图片中显示的所有内容:

enter image description here

为什么它为 object 类型返回 null?

代码

WebHostBuilder builder = new WebHostBuilder();
builder.UseStartup<Startup>();

string appPath = AppDomain.CurrentDomain.BaseDirectory;
string jsonPath = Path.Combine(Directory.GetParent(Directory.GetParent(appPath).FullName).FullName, "appsettings.json");

IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(appPath)
.AddJsonFile(jsonPath, optional: true, reloadOnChange: true)
.Build();

var sect = configuration.GetSection("Config");//has value null
var sect2 = configuration.GetSection("tt");//has value null
var sect3 = configuration.GetSection("Url"); has value 333

最佳答案

您的示例没有任何问题。您所指的 Value 属性是一个 string,对于您的 sect 都是 null >sect2 变量只是因为它们都不包含 string 值 - 正如您所说,它们都是对象。

如果你想从中提取一个值,例如sect2,你可以使用这样的东西来做到这一点:

var aaValue = sect2.GetValue<int>("aa");

还有几个选项可以获取像这样的部分的值。这是将绑定(bind)到 POCO 的另一个示例:

public class TT
{
public int AA { get; set; }
public int X { get; set; }
}

var ttSection = sect2.Get<TT>();

如果您只想获取嵌套值,则根本没有理由使用 GetSection。例如,您可以执行以下操作:

var redisHostname = configuration["Config:Dev:RedisAddress:Hostname"];

关于c# - 配置 GetSection 返回对象部分的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53872120/

29 4 0
文章推荐: html - border-collapse : collapse; on the box shadow in IE browsers 的影响