Yo uso VSCode y NetCore 1.1.1.
Necesito almacenar varias rutas de datos en mi appsetting.json para que mi aplicación de consola sepa dónde buscar sus datos.
Este es un extracto del archivo appsettings.json:
{ "ConnectionStrings": { "Database": "Filename=./Data/Database/securities_master.db" }, "Data": { "Folders": ["E:/Data/Folder1/","E:/Data/Folder2/"] } }Cargo el archivo de configuración y quiero que la matriz "Carpetas" se almacene en una 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 es NULL !
Si cambio mi appsetting.json para que apunte solo a un único directorio como este, todo funciona:
{ "ConnectionStrings": { "Database": "Filename=./Data/Database/securities_master.db" }, "Data": { "Folders": "E:/Data/Folder1/" } } dataFolder = " E:/Datos/Carpeta1/ "
Entonces, el problema parece ser que no le gusta la matriz de cadenas, pero para mí parece una matriz de cadenas Json válida. ¿Cómo debo modificar mi configuración de aplicaciones (o mi código C#) para solucionar esto?
El indexador de una sección devuelve una cadena por coincidencia de clave exacta, y dado que los valores de matriz tienen claves con sufijos, no hay nada que coincida con la clave dada y obtienes un valor nulo.
Para que funcione, puede usar algo como esto
var section = configuration.GetSection($"{APP_SETTINGS_SECTION}:{APP_SETTINGS_KEY}"); var folders = section.Get<string[]>();Y mira esto para más opciones.
Respuesta original de aquí: https://stackoverflow.com/a/42169474/7263255
Funciona así:
var someArray = configuration .GetSection("SomeArray") .GetChildren() .Select(x => x.Value) .ToArray();