Convertir cadena JSON en objeto C#

Fil Zjazel Romaeus Villegas 12 octubre 2023
  1. Convierta una cadena JSON en un objeto C# usando Newtonsoft.Json
  2. Convierta una cadena JSON en un objeto C# usando JavaScriptSerializer
  3. Convertir una cadena JSON en un ejemplo de código de objeto C#
Convertir cadena JSON en 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.

  • Haga clic derecho en Referencias
  • Haga clic en Add Reference
  • Haga clic en la pestaña Assemblies a la izquierda
  • Busque el archivo System.Web.Extensions.dll y haga clic en OK.

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

Artículo relacionado - Csharp Object