Como leer archivos JSON en C#
Una manera muy fácil y rápida sobre como leer archivos JSON en .NET C# es utilizar la clase JsonConvert del nuget Newtonsoft.Json, uno de los paquetes más utilizados.
Instalar Newtonsoft.Json
Abre tu proyecto en Visual Studio, da clic derecho sobre él y selecciona “Administrar paquetes NuGet”.
Instala el nuget indicado en la imagen, este es compatible con la mayoría (si no es que todos) los proyectos en .NET.
Para estos ejemplos se utiliza un proyecto de consola en Visual Studio, aunque también se ha probado en proyectos web form, Windows form y Net Core.
Como leer archivos json C#
Para comenzar leeremos un contenido json básico, por lo tanto, el siguiente contenido nos servirá.
{
'Departamento': 'Contabilidad',
'Estado': true
}
Además, utilizaremos una clase de C# con las propiedades del json; esto permitirá almacenar en una lista los datos del json para trabajar. Creamos una clase de nombre Depa.cs en nuestro proyecto y agregamos este contenido.
public class Depa
{
public string Departamento { get; set; }
public bool Estado { get; set; }
}
Ya que tenemos los archivos, ahora vamos a leer los datos utilizando el nuget que instalamos mediante c#, utilizando el código siguiente nos permite hacer esta tarea.
string json = @"{
'Departamento': 'Contabilidad',
'Estado': true
}";
Depa depas = JsonConvert.DeserializeObject<Depa>(json);
Console.WriteLine(depas.Departamento);
Console.ReadLine();
No olvides agregar el espacio de nombres (using) “using Newtonsoft.Json” en tu clase C# para evitar errores con las clases que utilizamos.
Al ejecutar el código anterior, podemos obtener el resultado siguiente:
Podría interesarte Cómo leer XML en C#
El ejemplo anterior como dijimos es un ejemplo básico de un archivo json, ahora hagamos otro ejemplo más complejo agregando más contenido al json. Ahora utilizaremos el json siguiente.
{
'Departamento': 'Contabilidad',
'Estado': true,
'Empleados': [
{
'Nombre': 'Juan Escutia',
'Edad': 18,
'Fecha': '2022-01-01'
},
{
'Nombre': 'Vicente Suarez',
'Edad': 17,
'Fecha': '2022-02-01'
},
{
'Nombre': 'Agustin Melgar',
'Edad': 20,
'Fecha': '2022-03-01'
}
]
}
Como el archivo json tiene más contenido, debemos de modificar la clase Depa.cs que creamos en el anterior ejemplo de la siguiente manera.
public class Depa
{
public string Departamento { get; set; }
public bool Estado { get; set; }
public IList<Empleados> Empleados { get; set; }
}
Pueden observar que estamos agregando otra lista de datos como propiedad, por lo tanto, debemos de crear otra clase de nombre Empleado.cs con las siguientes propiedades.
public class Empleados
{
public string Nombre { get; set; }
public int Edad { get; set; }
public DateTime Fecha { get; set; }
}
Algo que puedes notar es que cada clase contiene las propiedades con el mismo nombre que las propiedades del json. Esto permite que al deserializar valida los nombres para almacenar los datos obtenidos.
Por lo tanto, debes tener atención al crear tus clases para almacenar datos obtenidos de un json para evitar complicarte esta tarea.
Ya que tenemos todos los archivos, ahora veamos cómo obtener los datos del json desde C#, un poco similar al ejemplo anterior.
string json = @"{
'Departamento': 'Contabilidad',
'Estado': true,
'Empleados': [
{
'Nombre': 'Juan Escutia',
'Edad': 18,
'Fecha': '2022-01-01'
},
{
'Nombre': 'Vicente Suarez',
'Edad': 17,
'Fecha': '2022-02-01'
},
{
'Nombre': 'Agustin Melgar',
'Edad': 20,
'Fecha': '2022-03-01'
}
]
}";
Depa depas = JsonConvert.DeserializeObject<Depa>(json);
Console.WriteLine(depas.Departamento);
List<Empleados> emp = depas.Empleados.ToList();
foreach (var item in emp)
{
Console.WriteLine(item.Nombre + " | " + item.Edad);
}
Console.ReadLine();
Ejecutemos nuestro proyecto y vemos un resultado similar a esto.
De esta manera puedes obtener los datos de los archivos json sin tantas complicaciones. Talvez veas que no estamos utilizando un archivo json independiente y solo declaramos una variable con el contenido json, el proceso de obtener los datos es igual; lo único que harías es agregar el código de la ubicación del archivo y la captura del contenido para almacenarlo en una cadena.