Leer configuraciones de un archivo JSON en c#

Ariel Alvarado | Mayo 10, 2021


Primero crearemos un nuevo proyecto, una aplicación de consola (.NET framework 4.7.1), le damos un nombre cualquiera y aceptamos.

Crear un nuevo proyecto de consola

Lo primero que haremos es agregar dos paquetes con NuGet:

  • Microsoft.Extensions.Configuration.Binder ()
  • Microsoft.Extensions.Configuration.Json

Los pasos para agregar paquetes son:

  1. Click derecho en el nombre de nuestro proyecto en el explorador de soluciones.
  2. Seleccionamos Administrar paquetes NuGet....
  3. Seleccionamos el paquete a instalar.
  4. Click en instalar.

Ojo que estos pasos deben repetirse para cada paquete.

Instalar paquetes con NuGet

Ahora, agregamos un archivo JSON al proyecto. Para el ejemplo lo llamaré config.json pero puede ser cualquier otro nombre. El contenido del archivo será:

{
  "configuraciones": {
    "atributoCadena": "config cadena",
    "atributoBoolean": true,
    "atributoNumerico": 14
  }
}

Con el archivo JSON ya creado, añadiremos una clase con los atributos que queremos cargar. Cabe hacer notar que las propiedades en la clase tienen el mismo nombre que en el archivo JSON.

Configuraciones.cs
public class Configuraciones
{
    public string atributoCadena { get; set; }
    public bool atributoBoolean { get; set; }
    public int atributoNumerico { get; set; }
}

Ahora viene la parte interesante, leeremos el archivo de configuraciones y cargaremos los valores a la clase creada anteriormente, veamos cómo:

Program.cs
static void Main(string[] args)
{
    var configurationBuilder = new ConfigurationBuilder()
        // leemos el archivo config.json, esto significa que el archivo debe estar en el build
        // optional indica si el archivo es opcional, lanza un error si el archivo no se encuentra
        // reloadOnChange permite recargar el archivo si es modificado
        .AddJsonFile("config.json", optional: false, reloadOnChange: false)
        .Build();

    // la sección del archivo que buscamos se llama configuraciones (ver archivo json)
    var seccion = configurationBuilder.GetSection("configuraciones");

    // obtenemos las configuraciones en la clase que creamos anteriormente
    var configuraciones= seccion.Get<Configuraciones>();

    Console.WriteLine("Configuraciones leídas del archivo:");
    Console.WriteLine("Valor Cadena:" + configuraciones.atributoCadena);
    Console.WriteLine("Valor Boolean:" + configuraciones.atributoBoolean);
    Console.WriteLine("Valor Numérico:" + configuraciones.atributoNumerico);
    Console.ReadLine();

}

Nota importante: si hacemos correr el proyecto en este momento, un error de archivo no encontrado se lanzará porque el archivo config.json¨no se copia a la carpeta build por defecto. Arreglemos eso, simplemente hacemos click en el archivo, propiedades avanzadas y seleccionamos Copiar en el directorio de salida: Copiar siempre.

Copiar archivo de configuración al build

Ahora si podemos hacer correr el proyecto, ya era hora. El resultado esperado es:

Configuraciones cargadas

Y eso es todo por ahora, keep coding!!!