none
Deserialize Json para c# RRS feed

  • Pergunta

  • Olá pessoal, estou a ter alguns problemas a fazer o Deserialize de um ficheiro Json usando o Newtonsoft.

    O ficheiro Json contem o seguinte:

     [ {
        "Name": "PRO",
        "Price": 150,
        "Specs": [
          {
            "A": "Pagina Inicial",
            "B": "Pagina Detalhes da Empresa"
          }
        ],
        "Design": 100,
        "Manutencao": 100,
        "SSL": 100
      },
    
      {
        "Name": "ULTRA",
        "Price": 200,
        "Specs": [
          {
            "A": "Pagina Inicial",
            "B": "Pagina Detalhes da Empresa"
          }
        ],
        "Design": 120,
        "Manutencao": 200,
        "SSL": 100
      } ]

    O meu código está assim:

    var json = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"\PlanosWeb.json");
    var plan = JsonConvert.DeserializeObject<Planos[]>(json);

    O erro dá na variável plan…

    Erro:  System.ArgumentException: Could not cast or convert from System.String to System.Collections.Generic.List`1[GIT.Specs].

    Alguma ideia de como resolver?

    Cumprimentos

    sábado, 1 de dezembro de 2018 19:51

Respostas

  • Olá,

    Tente fazer o Deserialize para uma lista de Planos ex:

    var json = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"\PlanosWeb.json");
    
    List<Planos> ListPlanos = JsonConvert.DeserializeObject<List<Planos>>(json);

    outro detalhe, sua propiedade Specs na sua classe planos é uma string e seu json esta retornando um array, veja só : 

     "Specs": [
          {
            "A": "Pagina Inicial",
            "B": "Pagina Detalhes da Empresa"
          }
        ],

    é ai que acontece o erro, veja a mensagem:

    "Could not cast or convert from System.String to System.Collections.Generic.List`1[GIT.Specs]."

    em sua classe planos tente o seguinte:

    public class Planos
        {
            public string Name { get; set; }
            public int Price { get; set; }
            public List<string> Specs { get; set; }
            public int Design { get; set; }
            public int Manutencao { get; set; }
            public int SSL { get; set; }
        }

    segunda-feira, 3 de dezembro de 2018 10:07

Todas as Respostas

  • Qual o código da classe Planos e demais tipos usados na mesma?

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sábado, 1 de dezembro de 2018 21:34
  • Esqueci-me de colocar a class…

     public class Planos
        {
            public string Name { get; set; }
            public int Price { get; set; }
            public string Specs { get; set; }
            public int Design { get; set; }
            public int Manutencao { get; set; }
            public int SSL { get; set; }
        }

    domingo, 2 de dezembro de 2018 11:06
  • Olá,

    Tente fazer o Deserialize para uma lista de Planos ex:

    var json = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"\PlanosWeb.json");
    
    List<Planos> ListPlanos = JsonConvert.DeserializeObject<List<Planos>>(json);

    outro detalhe, sua propiedade Specs na sua classe planos é uma string e seu json esta retornando um array, veja só : 

     "Specs": [
          {
            "A": "Pagina Inicial",
            "B": "Pagina Detalhes da Empresa"
          }
        ],

    é ai que acontece o erro, veja a mensagem:

    "Could not cast or convert from System.String to System.Collections.Generic.List`1[GIT.Specs]."

    em sua classe planos tente o seguinte:

    public class Planos
        {
            public string Name { get; set; }
            public int Price { get; set; }
            public List<string> Specs { get; set; }
            public int Design { get; set; }
            public int Manutencao { get; set; }
            public int SSL { get; set; }
        }

    segunda-feira, 3 de dezembro de 2018 10:07
  • Muito obrigado, resolvido ;)
    segunda-feira, 3 de dezembro de 2018 19:40