Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le classeur de configuration .NET récupère les valeurs de configuration via des fournisseurs de configuration et tente de lier ces valeurs aux propriétés d’objet. Auparavant, lorsqu’une valeur de configuration était null, le classeur l’a traité comme si la valeur n’existait pas du tout, et donc ignoré la liaison. En d’autres termes, il n’a pas fait la distinction entre les valeurs null et les valeurs manquantes. Ce comportement a provoqué une confusion significative pour les utilisateurs qui s'attendaient à ce que des valeurs définies explicitement dans leur configuration soient respectées et correctement liées.
En outre, le fournisseur de configuration JSON a précédemment converti null des valeurs dans la configuration en chaînes vides. Cela a également contribué à la confusion, car les propriétés liées à ces valeurs recevaient une chaîne vide plutôt que la valeur null attendue.
Cette modification résout les deux problèmes. Le fournisseur de configuration JSON signale désormais correctement les valeurs null sans les modifier, et le classeur traite les valeurs null comme des entrées valides, les liant comme n'importe quelle autre valeur.
La mise à jour inclut aussi des améliorations pour faciliter la liaison des valeurs null dans les tableaux et autorise désormais la liaison de tableaux vides.
Version introduite
.NET 10
Comportement précédent
Auparavant, lorsqu’une valeur de configuration était null, le classeur l’a traité comme si la valeur n’existait pas du tout, et donc a passé la liaison. Le système n’a pas fait de distinction entre les valeurs null et les valeurs manquantes.
En outre, le fournisseur de configuration JSON a converti null les valeurs de la configuration en chaînes vides. Les propriétés liées à ces valeurs recevaient une chaîne vide plutôt que la chaîne attendue null.
Tenez compte du contenu du fichier appsettings.json de configuration suivant :
{
"NullConfiguration": {
"StringProperty": null,
"IntProperty": null,
"Array1": [null, null],
"Array2": []
}
}
Et le code de liaison correspondant :
public class NullConfiguration
{
public NullConfiguration()
{
// Initialize with non-default value to
// ensure binding overrides these values.
StringProperty = "Initial Value";
IntProperty = 123;
}
public string? StringProperty { get; set; }
public int? IntProperty { get; set; }
public string[]? Array1 { get; set; }
public string[]? Array2 { get; set; }
}
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build().GetSection("NullConfiguration");
// Now bind the configuration.
NullConfiguration? result = configuration.Get<NullConfiguration>();
Console.WriteLine($"StringProperty: '{result!.StringProperty}', intProperty: {(result!.IntProperty.HasValue ? result!.IntProperty : "null")}");
Console.WriteLine($"Array1: {(result!.Array1 is null ?
"null" : string.Join(", ", result!.Array1.Select(a => $"'{(a is null ? "null" : a)}'")))}");
Console.WriteLine($"Array2: {(result!.Array2 is null ?
"null" : string.Join(", ", result!.Array2.Select(a => $"'{(a is null ? "null" : a)}'")))}");
Sortie:
StringProperty: '', intProperty: 123
Array1: '', ''
Array2: null
Explication de la sortie :
-
StringProperty: lanullvaleur du JSON a été convertie par le fournisseur JSON en chaîne vide (« »), en remplaçant la valeur initiale. -
IntProperty: est resté inchangé (123) car le fournisseur a convertinullen une chaîne vide, qui n’a pas pu être analysée comme unint?, donc la valeur d’origine a été conservée. -
Array1: lié à un tableau contenant deux chaînes vides, car chaquenullélément de tableau a été traité comme une chaîne vide. -
Array2: resténulldepuis qu’un tableau[]vide dans le JSON a été ignoré par le classeur.
Nouveau comportement
À compter de .NET 10, null les valeurs sont désormais correctement liées à leurs propriétés correspondantes, y compris les éléments de tableau. Même les tableaux vides sont correctement reconnus et liés en tant que tableaux vides plutôt que d’être ignorés.
L’exécution de l’exemple de code produit les résultats suivants à l’aide du fournisseur de configuration JSON :
StringProperty: 'null', intProperty: null
Array1: 'null', 'null'
Array2:
Type de changement cassant
Il s’agit d’un changement comportemental.
Raison de la modification
Le comportement précédent était confus et a souvent conduit à des plaintes des utilisateurs. En traitant ce problème, le processus de liaison de configuration est désormais plus intuitif et cohérent, ce qui réduit la confusion et aligne le comportement avec les attentes des utilisateurs.
Action recommandée
Si vous préférez le comportement précédent, vous pouvez ajuster votre configuration en conséquence :
- Lorsque vous utilisez le fournisseur de configuration JSON, remplacez
nullles valeurs par des chaînes vides ("") pour restaurer le comportement d’origine, où les chaînes vides sont liées au lieu denull. - Pour les autres fournisseurs qui prennent en charge les valeurs
null, supprimez les entréesnullde la configuration pour répliquer le comportement antérieur, où les valeurs manquantes sont ignorées et les valeurs de propriété existantes restent inchangées.