Convertir cadena JSON en objeto C#
-
Convierta una cadena JSON en un objeto C# usando
Newtonsoft.Json - Convierta una cadena JSON en un objeto C# usando JavaScriptSerializer
-
Convertir una cadena JSON en un ejemplo de código de objeto
C#
Este tutorial demostrará cómo convertir una cadena JSON en un objeto C# usando dos métodos diferentes.
El primero usa la librería Newtonsoft.Json, mientras que el segundo usa el JavaScriptSerializer. Ambos métodos son similares pero usan una sintaxis ligeramente diferente y requieren referencias diferentes.
Convierta una cadena JSON en un objeto C# usando Newtonsoft.Json
La biblioteca Newtonsoft.Json es un marco JSON de uso común para .NET. Esta biblioteca se puede utilizar después de instalar el paquete en su solución. Puede usar la CLI de .NET con el siguiente comando para instalar el paquete.
> dotnet add package Newtonsoft.Json --version 13.0.1
Una cadena JSON se puede convertir en cualquier tipo de objeto C# siempre que sea una cadena JSON válida para el tipo de objeto. Esto se hace deserializando la cadena, convirtiéndola en el tipo especificado (T) y proporcionando la cadena JSON de entrada.
JsonConvert.DeserializeObject<T>(json_string);
Convierta una cadena JSON en un objeto C# usando JavaScriptSerializer
Una opción más antigua para convertir cadenas JSON en objetos C# es JavaScriptSerializer. Si bien no es tan rápido como la solución Newtonsoft.Json, aún se puede utilizar bien. Para usar este método, debe agregar una referencia a System.Web.Extensions.dll a su proyecto.
Para agregar la referencia, siga los pasos a continuación.
-
Navegar al Explorador de soluciones
-
Haga clic derecho en Referencias
-
Haga clic en
Add Reference -
Haga clic en la pestaña
Assembliesa la izquierda -
Busque el archivo
System.Web.Extensions.dlly haga clic enOK.
El JavaScriptSerializer funciona de manera similar al método Newtonsoft.Json en el sentido de que solo requiere la cadena JSON y el tipo en el que se va a deserializar.
JavaScriptSerializer().Deserialize<T>(json_string)
Convertir una cadena JSON en un ejemplo de código de objeto C#
El siguiente código de ejemplo muestra cómo convertir una cadena JSON en un objeto C# de cualquier tipo mediante las funciones JsonConvert.DeserializeObject<T> y JavaScriptSerializer. Para este ejemplo, estamos convirtiendo cadenas en un objeto de lista que contiene números enteros ( List<Int32> ) y en una clase personalizada que también especificamos en el programa.
using Newtonsoft.Json;
using System.Data;
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Web.Script.Serialization;
namespace JSON_To_Object_Example {
class Program {
static void Main(string[] args) {
// Declare the JSON Strings
string list_str = "[1, 2, 3, 9, 8, 7]";
string custom_class_str =
"{ \"Name\":\"John Doe\",\"Age\":21,\"Birthday\":\"2000-01-01T00:00:00\"}";
// ----- Newtonsoft Method -----
// Deserialize the string by specifying the object type
List<Int32> list_converted_ns = JsonConvert.DeserializeObject<List<Int32>>(list_str);
// Print the contents of the newly converted List object to the Console.
Console.WriteLine("Converted List - Newtonsoft: " + String.Join(", ", list_converted_ns) +
"\n");
// The same can be done for any type of C# object, including custom classes. Just change the
// specified Type.
Custom_Class class_converted_ns =
JsonConvert.DeserializeObject<Custom_Class>(custom_class_str);
Console.WriteLine("Converted Class - Newtonsoft:");
PrintPropreties(class_converted_ns);
Console.WriteLine("\n\n");
// ----- JavaScriptSerializer Method -----
// Deserialize the string by specifying the object type
List<Int32> list_converted_js = new JavaScriptSerializer().Deserialize<List<Int32>>(list_str);
Console.WriteLine(
"Converted List - JavaScriptSerializer: " + String.Join(", ", list_converted_js) + "\n");
Custom_Class class_converted_js =
new JavaScriptSerializer().Deserialize<Custom_Class>(custom_class_str);
Console.WriteLine("Converted Class - JavaScriptSerializer:");
PrintPropreties(class_converted_js);
Console.ReadLine();
}
public class Custom_Class {
// Custom Class created for the purposes of this tutorial
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
public static void PrintPropreties(object obj) {
// Uses the System.Component Model to read each property of a class and print its value
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) {
string name = descriptor.Name;
object value = descriptor.GetValue(obj);
Console.WriteLine("{0}: {1}", name, value);
}
}
}
}
Este código generará la lista de enteros unidos por comas y todas las propiedades dentro de la clase personalizada convertida. Puede observar que ambos métodos producirán el mismo resultado.
Producción :
Converted List - Newtonsoft: 1, 2, 3, 9, 8, 7
Converted Class - Newtonsoft:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am
Converted List - JavaScriptSerializer: 1, 2, 3, 9, 8, 7
Converted Class - JavaScriptSerializer:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am
Artículo relacionado - Csharp JSON
- C# Parse JSON
- C# Convertir el objeto en una cadena JSON
- Deserializar JSON con C#
- Escribir JSON en un archivo en C#
- Publicar JSON en un servidor en C#