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

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

已引入的版本

.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