Saltar al contenido

Cómo convertir Json array a la lista de objetos en C#

Agradeceríamos tu ayuda para extender nuestros tutoriales sobre las ciencias informáticas.

Solución:

Como otros ya han señalado, la razón por la que no está obteniendo los resultados esperados es porque su JSON no coincide con la estructura de clase en la que está tratando de deserializar. Debe cambiar su JSON o cambiar sus clases. Dado que otros ya han mostrado cómo cambiar el JSON, tomaré el enfoque opuesto aquí.

Para que coincida con el JSON que publicó en su pregunta, sus clases deben definirse como las siguientes. Observe que he realizado los siguientes cambios:

  1. agregué un Wrapper clase correspondiente al objeto externo en su JSON.
  2. cambié el Values propiedad de la ValueSet clase de un List a un Dictionary desde el values propiedad en su JSON contiene un objeto, no un array.
  3. Agregué algunos adicionales [JsonProperty] attributes para que coincida con los nombres de propiedad en sus objetos JSON.

Definiciones de clase:

class Wrapper

    [JsonProperty("JsonValues")]
    public ValueSet ValueSet  get; set; 


class ValueSet

    [JsonProperty("id")]
    public string Id  get; set; 
    [JsonProperty("values")]
    public Dictionary Values  get; set; 


class Value

    [JsonProperty("id")]
    public string Id  get; set; 
    [JsonProperty("diaplayName")]
    public string DisplayName  get; set; 

Necesita deserializar en el Wrapper clase, no la ValueSet clase. A continuación, puede obtener el ValueSet desde el Wrapper.

var valueSet = JsonConvert.DeserializeObject(jsonString).ValueSet;

Aquí hay un programa de trabajo para demostrar:

class Program

    static void Main(string[] args)
    
        string jsonString = @"
        
            ""JsonValues"": 
                ""id"": ""MyID"",
                ""values"": 
                    ""value1"": 
                        ""id"": ""100"",
                        ""diaplayName"": ""MyValue1""
                    ,
                    ""value2"": 
                        ""id"": ""200"",
                        ""diaplayName"": ""MyValue2""
                    
                
            
        ";

        var valueSet = JsonConvert.DeserializeObject(jsonString).ValueSet;

        Console.WriteLine("id: " + valueSet.Id);
        foreach (KeyValuePair kvp in valueSet.Values)
        
            Console.WriteLine(kvp.Key + " id: " + kvp.Value.Id);
            Console.WriteLine(kvp.Key + " name: " + kvp.Value.DisplayName);
        
    

Y aquí está la salida:

id: MyID
value1 id: 100
value1 name: MyValue1
value2 id: 200
value2 name: MyValue2

http://json2csharp.com/

Encontré el enlace anterior increíblemente útil, ya que corrigió mis clases de C# al generarlas a partir del JSON que en realidad se devolvió.

Entonces llamé:

JsonConvert.DeserializeObject(jsonString); 

y todo funcionó como se esperaba.

¿Comprobó que esta línea funciona perfectamente y su string tiene valor en ella?

string jsonString = sr.ReadToEnd();

en caso afirmativo, pruebe este código para la última línea:

ValueSet items = JsonConvert.DeserializeObject(jsonString);

o si tienes un array de json puedes usar una lista como esta:

List items = JsonConvert.DeserializeObject>(jsonString);

buena suerte

Agradecemos que desees respaldar nuestro análisis añadiendo un comentario o dejando una puntuación te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *