Partager via


Clés vides ajoutées au dictionnaire par le classeur de configuration

Dans les versions précédentes, lorsque la configuration était liée à un type de dictionnaire, toutes les clés sans valeurs correspondantes dans la configuration ont été ignorées et n’ont pas été ajoutées au dictionnaire. Le comportement a changé de sorte que ces clés ne soient plus ignorées, mais créées automatiquement avec leurs valeurs par défaut. Cette modification garantit que toutes les clés répertoriées dans la configuration seront présentes dans le dictionnaire.

Version introduite

.NET 8 Preview 5

Comportement précédent

Auparavant, les clés vides dans la configuration étaient ignorées lorsqu’elles étaient liées à un type de dictionnaire. Tenez compte de la chaîne de configuration et du code de liaison suivants.

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}");
}

Auparavant, vous verrez la sortie suivante (notez que la clé q3 est manquante) :

q1: 1
q2: 2

Nouveau comportement

À compter de .NET 8, les clés de configuration vides sont ajoutées au dictionnaire avec leur valeur par défaut pendant la liaison de configuration.

Considérez le code de la section comportement précédent, qui génère maintenant le texte suivant montrant que q3 a été ajouté au dictionnaire avec sa valeur par défaut :

q1: 1
q2: 2
q3: 0

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

Cette modification demandée par l’utilisateur garantit que toutes les clés répertoriées dans la configuration sont présentes dans le dictionnaire. La présence de toutes les clés simplifie le processus et évite les problèmes potentiels liés aux clés manquantes.

Vérifiez et adaptez votre logique d’application pour prendre en charge la présence des entrées de dictionnaire nouvellement créées avec des valeurs vides. Si le nouveau comportement n’est pas souhaitable, supprimez les entrées vides de la configuration. En éliminant ces entrées, aucune entrée de dictionnaire avec des valeurs vides n’est ajoutée pendant le processus de liaison.

API affectées