空键由配置绑定器添加到字典
在以前的版本中,当配置绑定到字典类型时,会跳过配置中没有相应值的任何键,它们也不会添加到字典中。 行为已发生更改,因此不再跳过这些键,而是使用其默认值自动创建这些键。 此更改可确保配置中列出的所有键都存在于字典中。
引入的版本
.NET 8 预览版 5
旧行为
以前,当绑定到字典类型时,配置中的空键会被跳过。 请考虑以下配置字符串和绑定代码。
var json = @"{
""Queues"": {
""q1"": {
""V"": 1
},
""q2"": {
""V"": 2
},
""q3"": {
}
}
}";
public class Q
{
public Dictionary<string, QueueValue> Queues { get; set; } = new();
}
public class QueueValue
{
public int V { get; set; }
}
var configuration = new ConfigurationBuilder()
.AddJsonStream(StringToStream(json))
.Build();
Q options = new Q();
configuration.Bind(options);
foreach (var kvp in options.Queues)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value.V}");
}
以前,你会看到以下输出(注意,键 q3
缺失):
q1: 1
q2: 2
新行为
从 .NET 8 开始,空配置键会在配置绑定过程中以默认值添加到字典中。
查看以前的行为部分中的代码,它们现在会输出以下文本,显示 q3
及其默认值已添加到字典中:
q1: 1
q2: 2
q3: 0
中断性变更的类型
此更改为行为更改。
更改原因
此用户请求的更改可确保配置中列出的所有键都存在于字典中。 让所有键都存在后,可以简化该过程,并避免缺少键的潜在问题。
建议操作
验证并调整应用程序逻辑,以适应新创建的字典条目和空值。 如果新行为不理想,请从配置中删除空值条目。 通过消除这些条目,绑定过程中将不会添加任何包含空值的字典条目。