web-dev-qa-db-fra.com

Comment coder en dur et lire un tableau de chaînes dans appSettings.json?

J'utilise VSCode et NetCore 1.1.1.

J'ai besoin de stocker plusieurs chemins de données dans mon appsetting.json pour que mon application console sache où chercher ses données.

Voici un extrait du fichier appsettings.json:

{

    "ConnectionStrings":

    {

        "Database": "Filename=./Data/Database/securities_master.db"
    },

    "Data":

    {

     "Folders": ["E:/Data/Folder1/","E:/Data/Folder2/"]

    }
}

Je charge le fichier de configuration et je souhaite que le tableau "Dossiers" soit stocké dans une variable:

const string APP_SETTINGS_SECTION = "Data";
const string APP_SETTINGS_KEY = "Folders";

var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
var configuration = builder.Build();
var dataFolders = configuration.GetSection(APP_SETTINGS_SECTION)[APP_SETTINGS_KEY];

dataFolders est NULL !

Si je modifie mon appsetting.json pour pointer uniquement vers un seul répertoire comme celui-ci, tout fonctionne:

{

    "ConnectionStrings":

    {

        "Database": "Filename=./Data/Database/securities_master.db"
    },

    "Data":

    {

     "Folders": "E:/Data/Folder1/"   
    }
}

dataFolder = "E:/Data/Folder1 /"

Donc, le problème semble être qu'il n'aime pas le tableau de chaînes, mais pour moi, il ressemble à un tableau de chaînes Json valide. Comment dois-je modifier mes paramètres d'application (ou mon code C #) pour résoudre ce problème?

19
Nicola Prada

L'indexeur d'une section renvoie une chaîne par correspondance de clé exacte, et puisque les valeurs de tableau ont des clés avec des suffixes, rien ne correspond à la clé donnée et vous obtenez null.

Pour le faire fonctionner, vous pouvez utiliser quelque chose comme ça

var section = configuration.GetSection($"{APP_SETTINGS_SECTION}:{APP_SETTINGS_KEY}");
var folders = section.Get<string[]>();

Et vérifiez this pour plus d'options.

36
THTP

Réponse originale d'ici: https://stackoverflow.com/a/42169474/7263255

Fonctionne comme ceci:

var someArray = configuration
   .GetSection("SomeArray")
   .GetChildren()
   .Select(x => x.Value)
   .ToArray();
9
Halloween_Udo