Publicada:

.NET 7.0 + RestSharp - Deserializar la Respuesta JSON Dinámica de Solicitud HTTP

Tutorial creado con .NET 7.0

Este es un tutorial rápido sobre cómo enviar una solicitud HTTP a una API con RestSharp y deserializar la respuesta JSON dinámicamente sin crear una clase personalizada para que coincida con los datos.

El ejemplo envía una solicitud HTTP GET a la API Reqres, que es una API JSON en línea falsa utilizada para pruebas, incluye la ruta /api/users/1 que devuelve los siguientes datos de muestra para un solo usuario.

{
  "data": {
    "id": 1,
    "email": "[email protected]",
    "first_name": "George",
    "last_name": "Bluth",
    "avatar": "https://reqres.in/img/faces/1-image.jpg"
  }
}


Deserializar JSON en JsonNode con JsonSerializer

Al deserializar los datos de respuesta en un objeto JsonNode, no es necesario crear una clase personalizada para acceder a todas las propiedades. La clase JsonNode está en el espacio de nombres System.Text.Json.Nodes que viene con .NET framework.

Se puede acceder a las propiedades por clave utilizando la sintaxis de corchetes como un objeto Diccionario (por ejemplo, data["data"]["id"]). El tipo de retorno es JsonNode pero se puede convertir al tipo que espera (por ejemplo, (string)data["data"]["id"]), y allí no es necesario convertir a cadena cuando se envía a la pantalla.

Este es el código para deserializar una cadena json en un objeto JsonNode utilizando la clase JsonSerializer de System.Text.Json:

var data = JsonSerializer.Deserialize<JsonNode>(jsonString);


No se puede deserializar JSON en dynamic con JsonSerializer

Tenga en cuenta que el JsonSerializer de System.Text.Json no admite la deserialización de una cadena JSON en un objeto dynamic. Entonces, para acceder a las propiedades JSON dinámicas, el enfoque más simple que he encontrado es usar JsonNode.


Ejemplo de solicitud de RestSharp con respuesta deserializada

El siguiente código de ejemplo de C# usa RestSharp para enviar una solicitud GET, deserializar la respuesta y escribir propiedades JSON en la consola.

Ejecute y edite el código en DotNetFiddle en https://dotnetfiddle.net/RyKyMG.

using RestSharp;
using System;
using System.Text.Json;
using System.Text.Json.Nodes;
    
public class Program
{
    public static void Main()
    {
        // send GET request with RestSharp
        var client = new RestClient("https://reqres.in");
        var request = new RestRequest("api/users/1");
        var response = client.Get(request);
        
        // deserialize json string response to JsonNode object
        var data = JsonSerializer.Deserialize<JsonNode>(response.Content);
        
        Console.WriteLine($"""
        ----------------
        json properties
        ----------------
        id: {data["data"]["id"]}
        email: {data["data"]["email"]}
        first name: {data["data"]["first_name"]}
        last name: {data["data"]["last_name"]}
        avatar: {data["data"]["avatar"]}

        ----------------
        raw json data
        ----------------
        {data}
        """);
    }
}


Propiedades JSON de la solicitud RestSharp

Este es el resultado del código de ejemplo, primero las propiedades json individuales de la respuesta HTTP seguidas por el objeto de datos json sin procesar.

----------------
json properties
----------------
id: 1
email: [email protected]
first name: George
last name: Bluth
avatar: https://reqres.in/img/faces/1-image.jpg

----------------
raw json data
----------------
{
  "data": {
    "id": 1,
    "email": "[email protected]",
    "first_name": "George",
    "last_name": "Bluth",
    "avatar": "https://reqres.in/img/faces/1-image.jpg"
  },
  "support": {
    "url": "https://reqres.in/#support-heading",
    "text": "To keep ReqRes free, contributions towards server costs are appreciated!"
  }
}

 


Suscríbete o Sígueme para actualizaciones

Suscríbete a mi canal de YouTube o sígueme en Twitter, Facebook o GitHub para recibir notificaciones cuando publique contenido nuevo.

Aparte de la codificación...

Actualmente estoy intentando viajar por Australia en motocicleta con mi esposa Tina en un par de Royal Enfield Himalayan. Puedes seguir nuestras aventuras en YouTube, Instagram y Facebook.


¿Necesita Ayuda .NET?

Buscar fiverr para encontrar ayuda rápidamente de desarrolladores .NET experimentados.