C# GetValue<;T>;无论类型如何,始终获取null/default

C# GetValue<;T>;无论类型如何,始终获取null/default,c#,.net-core,config,appsettings,C#,.net Core,Config,Appsettings,我注意到下面的陈述产生了矛盾 public static string GetValidation(this IConfiguration self, string key) { IConfigurationSection section = self.GetSection(key); string value1 = section.Value; string value2 = section.GetValue<string>(key); return ""; }

我注意到下面的陈述产生了矛盾

public static string GetValidation(this IConfiguration self, string key)
{
  IConfigurationSection section = self.GetSection(key);

  string value1 = section.Value;
  string value2 = section.GetValue<string>(key);

  return "";
}
第一个值是预期的节点内容。第二个是空的。当我尝试键入整数和布尔值时,得到了零和假,即默认值(当然,我将配置文件中的值更改为非字符串,例如分别为13和true)

我仔细研究了这个问题,用谷歌搜索了一下,没有发现任何有用的东西


我在这里遗漏了什么(因为我确信这不是.NET中的一个bug,呵呵),配置中的值应该都是字符串。使用GetValue将它们转换为正确的格式。配置应该是的字典

"SomePath": "Some value",
"AlsoTried": "13",
"AndEven": "true",
使用以下命令,您应该获得正确的值及其类型

section.GetValue<int>("AlsoTried"); // out type will int and value 13.
section.GetValue<bool>("AndEven"); // out type will be bool and value true
section.GetValue(“AlsoTried”);//输出类型为int,值为13。
section.GetValue(“AndEven”);//输出类型为bool,值为true
希望有帮助。

找到解释配置和数据检索的此URL。

配置中的值应为所有字符串。使用GetValue将它们转换为正确的格式。配置应为的字典

"SomePath": "Some value",
"AlsoTried": "13",
"AndEven": "true",
使用以下命令,您应该获得正确的值及其类型

section.GetValue<int>("AlsoTried"); // out type will int and value 13.
section.GetValue<bool>("AndEven"); // out type will be bool and value true
section.GetValue(“AlsoTried”);//输出类型为int,值为13。
section.GetValue(“AndEven”);//输出类型为bool,值为true
希望有帮助。

找到了解释配置和数据检索的URL。

我假设您通过了
测试:SomeValue
作为密钥,您的配置如下所示:

"test": {
    "SomePath": "Some value",
    "AlsoTried": 13,
    "AndEven": true
}
您对
self.GetSection(key);
的调用将返回您请求的特定值,例如

var section = self.GetSection("test:SomePath");
这意味着
section
现在是该路径的“值”,例如
Some value
,这就是
section.value
属性返回正确数据的原因。但是,当您调用
section.GetValue(“test:SomePath”)
或只调用
section.GetValue(“SomePath”)
时,则section不包含“SomePath”的键值对,所以得到空值

如果在
self
上调用
GetValue(key)
,它将返回正确的值:

var section = self.GetValue<string>(key);
var section=self.GetValue(键);

我假设您通过了
测试:SomeValue
作为密钥,您的配置如下所示:

"test": {
    "SomePath": "Some value",
    "AlsoTried": 13,
    "AndEven": true
}
您对
self.GetSection(key);
的调用将返回您请求的特定值,例如

var section = self.GetSection("test:SomePath");
这意味着
section
现在是该路径的“值”,例如
Some value
,这就是
section.value
属性返回正确数据的原因。但是,当您调用
section.GetValue(“test:SomePath”)
或只调用
section.GetValue(“SomePath”)
时,则section不包含“SomePath”的键值对,所以得到空值

如果在
self
上调用
GetValue(key)
,它将返回正确的值:

var section = self.GetValue<string>(key);
var section=self.GetValue(键);

我建议将设置中的值保存为字符串,然后使用GetValue方法进行转换。当您直接索引配置或节时会得到什么?self[“MySection:SomePath”];section[“SomePath”];可能尝试调试以查看是否有任何内容被正确绑定,或者在构建配置时是否发生了某些事情?键的值是多少?我建议将设置中的值保存为字符串,然后使用GetValue方法进行转换。直接索引配置或节时会得到什么?self[“MySection:SomePath”];section[“SomePath”];可能尝试调试以查看是否有任何内容被正确绑定,或者在构建配置时是否发生了某些事情?key的值是多少“?是的,这应该是可行的。我遇到的问题是它不可行。如示例所示,将字符串转换为字符串应该是傻瓜式的,但结果会生成空值。我尝试转换字符串编号,如“13”,结果相同。不确定我遗漏了什么。理解来自您的语句:第一个值与预期值相同,即节点的内容"。如果您能够提取一个值,则意味着您可以访问配置。请检查是否查找了所有部分,并查看您应该查找哪个部分。是的,这应该是可行的。我遇到的问题是它不可行。如示例所示,将字符串转换为字符串应该是傻瓜式的,但会生成一个空值作为r结果。我尝试转换字符串数字,如“13”,结果相同。不确定我缺少什么。理解来自您的语句:“第一个值是预期值,即节点的内容”。如果你能提取一个值,那就意味着你可以访问配置。检查所有部分,看看你应该查找哪一个,然后向上搜索和+1努力。斯德哥尔摩早上6点,我已经起床4个小时了。无法入睡,但拒绝在这里问。一开始,这是…所以是的,是我的大脑把我搞砸了。谢谢,伙计!不用担心。很高兴我能帮上忙:-)竖起大拇指,为我的努力+1。斯德哥尔摩早上6点,我已经起床4个小时了。无法入睡,但拒绝在此询问。首先,那是。。。所以是的,是我的大脑把我搞砸了。谢谢你,伙计!别担心。很高兴我能帮忙:-)