空键由配置绑定器添加到字典

在以前的版本中,当配置绑定到字典类型时,会跳过配置中没有相应值的任何键,它们也不会添加到字典中。 行为已发生更改,因此不再跳过这些键,而是使用其默认值自动创建这些键。 此更改可确保配置中列出的所有键都存在于字典中。

引入的版本

.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

中断性变更的类型

此更改为行为更改

更改原因

此用户请求的更改可确保配置中列出的所有键都存在于字典中。 让所有键都存在后,可以简化该过程,并避免缺少键的潜在问题。

验证并调整应用程序逻辑,以适应新创建的字典条目和空值。 如果新行为不理想,请从配置中删除空值条目。 通过消除这些条目,绑定过程中将不会添加任何包含空值的字典条目。

受影响的 API