- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
你好,我在 .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
内部,我会看到图片中显示的所有内容:
为什么它为 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
>sect2string
值 - 正如您所说,它们都是对象。
如果你想从中提取一个值,例如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/
我是一名优秀的程序员,十分优秀!