GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como transformar um array de objetos do json em uma List de objetos em c# usando Json.NET


#1

Olá pessoal,
Estou começando a aprender c# e estou apanhando para fazer essa tarefa, pegar um array de objetos de um json e transformar os elementos desse array em objetos de um tipo específico e coloca-los em uma lista. Crie um método que faz isso e retorna uma List de um objeto:

private List<Caneta> LerJsonCanetas()
    {
        string sJson = null;
        JObject jObject = null;
        List<Caneta> arrCanetas = null;

        arrCanetas = new List<Caneta>();

        //lê o json
        sJson = File.ReadAllText(sArqConfiguracao); //sArqConfiguracao é o caminho para o arquivo json

        jObject = JObject.Parse(sJson);
        JArray sServer = (JArray)jObject["canetas"];

        IList<Caneta> server = jObject["canetas"].ToObject<Caneta[]>();
       
        foreach (Caneta caneta in server)
        {
            arrCaneta.Add(caneta);
        }

        return arrCaneta;
    }

Esse é o metodo que criei,não está retornando erro, mas os objetos que estão na lista estão com os atributos null, queria saber como faço para que eu consiga pegar os objetos que estão no array de json e colocalos em objetos do tipo caneta. Estou a dois dias procurando como fazer e não conseguir ainda. Alguém pode me ajudar? Obrigada.

Ah, esse é meu json:

{
"tempoexibicao": 10,
"canetas":
[
    {
        "cor" : "azul",
        "marca" : "bic"
    },
    {
        "cor" : "vermelha",
        "marca" : "pilot"
    }
]

}


#2

Aqui é área de C e C++. C# tem área própria.

Segue exemplo:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;

namespace JsonToClass
{
    class Program
    {
        static void Main(string[] args)
        {
            //ler arquivo com conteúdo json
            using (var sR = new StreamReader(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\canetas.json"))
            {
                string json = sR.ReadToEnd();
                var root = JsonConvert.DeserializeObject<Root>(json);

                foreach(var item in root.Canetas)
                {
                    Console.WriteLine("Cor {0}, Marca {1}", item.Cor, item.Marca);
                }
            }

            Console.Read();

        }
    }

    public class Root
    {
        public int TempoExibicao { get; set; }
        public List<Caneta> Canetas { get; set; }
    }

    public class Caneta
    {
        public string Cor { get; set; }
        public string Marca { get; set; }
    }
}