在以前的版本中,当配置绑定到字典类型时,将跳过配置中没有相应值的任何键,并且未添加到字典中。 行为已更改,以便不再跳过这些键,而是使用默认值自动创建这些键。 此更改可确保配置中列出的所有键都存在于字典中。
已引入的版本
.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
破坏性变更的类型
此更改为行为更改。
更改原因
此用户请求的更改可确保配置中列出的所有密钥都存在于字典中。 让所有密钥都简化了该过程,并避免了缺少密钥的潜在问题。
建议的措施
验证并调整应用程序逻辑,以适应新创建的具有空值的字典条目的存在。 如果新行为不理想,请从配置中删除空值条目。 通过消除这些条目,绑定过程中不会添加任何包含空值的字典条目。