es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combinando muchos conjuntos de resultados del mismo detalle en uno usando Newtonsoft.Json

Estoy preguntando si alguien puede ayudarme. Estoy consultando una API que me está dando una respuesta como la siguiente:

{
  "clients": {
    "one": {
      "id": "iphone6p_9",
      "category": "Mobile"
    },
    "two": {
      "id": "gmail_chr26_win",
      "category": "Web"
    },
    "three": {
      "id": "outlook16",
      "category": "Application"
    }
  }
}

Lo cual sería así en una clase C#:

public class One
{
    public string id { get; set; }
    public string category { get; set; }
}

public class Two
{
    public string id { get; set; }
    public string category { get; set; }
}

public class Three
{
    public string id { get; set; }
    public string category { get; set; }
}

public class Clients
{
    public One one { get; set; }
    public Two two { get; set; }
    public Three three { get; set; }
}

public class Root
{
    public Clients clients { get; set; }
}

¿Es posible utilizar Newtonsoft.Json para colocar dinámicamente One, Two y Three en el mismo tipo, ya que son iguales en lugar de ser individual x veces? ¿Como una List?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible deserializar dinámicamente la respuesta JSON en una lista de objetos del mismo tipo utilizando Newtonsoft.Json.

    Para lograr esto, tendrías que usar el método JsonConvert.DeserializeAnonymousType(). Esto te permite especificar el tipo de objeto en el que se deserializará el JSON en tiempo de ejecución, sin tener que definir una clase separada para la respuesta JSON.

    Aquí tienes un ejemplo de cómo podrías usar este método para deserializar la respuesta JSON en una lista de objetos del mismo tipo:

    // deserializar la respuesta JSON en un tipo anónimo
    var responseJson = "{ \"clients\": { \"one\": { \"id\": \"iphone6p_9\", \"category\": \"Mobile\" }, \"two\": { \"id\": \"gmail_chr26_win\", \"category\": \"Web\" }, \"three\": { \"id\": \"outlook16\", \"category\": \"Application\" } } }";
    var response = JsonConvert.DeserializeAnonymousType(responseJson, new { clients = new Dictionary<string, one="">() });
    
    // crear una lista de objetos del mismo tipo
    var clientsList = response.clients.Values.ToList();
    

    En este ejemplo, primero deserializamos la respuesta JSON en un tipo anónimo que tiene una propiedad de diccionario llamada clients. El tipo de valor del diccionario es One, que representa el tipo de los objetos en la respuesta JSON.

    Luego extraemos los valores del diccionario clients y los convertimos en una lista, lo cual nos da una lista de objetos del mismo tipo (One en este caso).

    Ten en cuenta que este enfoque asume que todos los objetos en la respuesta JSON tienen la misma estructura y propiedades. Si este no es el caso, necesitarías definir clases separadas para representar cada tipo de objeto, como lo hiciste en tu ejemplo inicial.</string,>

Comments are closed.