Convierta un diccionario a una cadena JSON en C#

Bilal Shahid 12 octubre 2023
  1. La estructura básica de una cadena JSON
  2. Utilice JsonConvert.SerializeObject() para convertir un diccionario a JSON en C#
  3. Utilice una función personalizada para convertir un diccionario a JSON en C#
  4. Use JavaScript Serializer en C# para aplicaciones web .NET
Convierta un diccionario a una cadena JSON en C#

Entonces, ¿cómo creamos un diccionario en C#? En C#, primero importamos un paquete de la siguiente manera.

using System.Collections.Generic;

Y luego, dentro de la función main declarada dentro de la clase, declaramos el objeto Diccionario.

IDictionary<int, double> cgpas = new IDictionary<int, dictionary>();

Avancemos ahora y veamos cómo podemos convertir un Diccionario a JSON.

La estructura básica de una cadena JSON

¿Qué es JSON? JSON significa JavaScript Object Notation.

Utiliza una especie de estructura donde los valores se asignan a una clave. Entonces, si queremos almacenar un conjunto de empleados en una tienda, digamos, podemos proceder de la siguiente manera.

{"employees" : {{"id" : 1 , "name" : "John"}, {"id" : 2, "name" : "Kevin"}}

Ahora, el ejemplo anterior puede ser un poco complejo. Pero vamos a desglosarlo.

Estamos definiendo JSON primero porque puede obtener una idea de su estructura y ser mejor al desglosar cómo ocurren las conversiones indicadas más adelante.

Así que empezamos con "employees", que es la KEY. Y luego, vemos un corchete seguido de 2 corchetes más (cerrar y abrir).

Un recinto de corchetes también se puede llamar un conjunto. Contiene claves y valores porque solo hemos definido 2 empleados diferentes, JOHN y KEVIN; por tanto, sólo se definen dos conjuntos.

Estos se encierran en un conjunto mayor, el valor de los KEY EMPLOYEES. Por lo tanto, si ahora tendemos a llamar a la etiqueta EMPLEADOS, recibiremos este conjunto como valor.

Utilice JsonConvert.SerializeObject() para convertir un diccionario a JSON en C#

Comencemos agregando algunos valores al diccionario CGPA que acabamos de inicializar hace un tiempo.

cgpas.Add(1, 3.4);
cgpas.Add(2, 3.13);
cgpas.Add(3, 3.01);

Y si queremos obtener el valor de, digamos, ID 2, podemos llamar a una instrucción PRINT de la siguiente manera.

Console.WriteLine("The CGPA of ID 2 is: " + cgpas[2]);

Aquí, el ID está encerrado entre corchetes, lo que indica la KEY. Ahora vamos a convertir usando la llamada JsonConvert.

string js = JsonConvert.SerializeObject(cgpas);

Antes de ejecutar este código, asegúrese de haber descargado NewtonSoft.JSON. Si no lo hace, diríjase a su sitio web, o si trabaja en Visual Studio, vaya a Nuget Packages e instale NewtonSoft.JSON para evitar errores.

Ahora, imprimamos la cadena convertida fácilmente aquí.

Console.WriteLine("The CGPAs are: " + js);

Y la salida es la siguiente.

The CGPAs are: {"1":3.4,"2":3.13,"3":3.01}

Si no puede encontrar la definición de SerializeObject, verifique si lo llama desde la clase JsonConvert y no el JsonConverter de System.Text.Json. Compruebe también la instalación de NewtonSoft.JSON.

Utilice una función personalizada para convertir un diccionario a JSON en C#

Veamos otra solución en la que implementamos una función que toma un diccionario y lo convierte en una cadena JSON. Se puede modificar más tarde para adaptarlo a sus necesidades, pero sigamos adelante y usémoslo para nuestro IDICCIONARIO CGPAS.

static string MyDictionaryToJson(IDictionary<int, double> dict) {
  var x = dict.Select(d => string.Format("\"{0}\": {1}", d.Key, string.Join(",", d.Value)));
  return "{" + string.Join(",", x) + "}";
}

Ahora, ¿qué está pasando aquí? Bueno, le pasamos el diccionario como parámetro.

Puedes notar que hemos usado IDICCIONARIO y no DICCIONARIO. IDICCIONARIO hereda de DICCIONARIO y tiene algunas extensiones útiles más, así que hemos continuado con él.

Sin embargo, las funciones básicas siguen siendo las mismas. Dentro de la función, formateamos la cadena asignando la KEY del DICCIONARIO y usando corchetes para expresar cómo deben estar los valores dentro de la cadena.

Los corchetes alrededor de {1} asignarán valores simplemente como números o cadenas. Sin embargo, si tiende a hacerlo más expresivo y complejo, puede agregar corchetes como este: {[1]} y hacer que funcione.

Esto imprimirá los valores entre corchetes. El resto devuelve la cadena en el formato adecuado.

Ahora dentro de la función MAIN, haz las mismas llamadas.

string js = MyDictionaryToJson(cgpas);

Console.WriteLine("The CGPAs are: " + js);

Producción :

The CGPAs are: {"1": 3.4,"2": 3.13,"3": 3.01}

Use JavaScript Serializer en C# para aplicaciones web .NET

Suponga que está utilizando aplicaciones web que utilizan C# como núcleo. En ese caso, es mejor seguir una estructura de LIST para definir los objetos y luego usar la función JavaScriptSerializer() para convertirlo en una cadena.

Utilice los espacios de nombres definidos a continuación para evitar errores de sintaxis durante la compilación.

using System.Collections.Generic;
using System.Text.Json;

Entonces, sigamos adelante y creemos la lista CGPA.

var cgpas = new List<int, double>();
cgpas.Add(new CGPA() { ID = 1, CGP = 3.4 });
cgpas.Add(new CGPA() { ID = 2, CGP = 3.13 });
cgpas.Add(new CGPA() { ID = 3, CGP = 3.01 });

Por supuesto, también debemos definir la clase CGPA a instanciar.

public class CGPA {
  public int ID { get; set; }
  public double CGP { get; set; }
}

Y luego, podemos convertirlo en una cadena de la siguiente manera.

var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(cgpas);

Puede imprimir el resultado serializado, que será la cadena formateada a partir de la LISTA inicializada.

Es posible que tengas que jugar un poco con tu código en las versiones web. A veces, las versiones de consola no funcionarán y serán totalmente compatibles.

Por lo tanto, asegúrese de que las funciones, los ensamblajes y las directivas que está utilizando coincidan con la versión que está ejecutando.

Puede modificar los códigos dados anteriormente según su idoneidad. ¡Gracias por leer!

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Artículo relacionado - Csharp Dictionary