ERRO AO DESSERIALIZAR JSON

 Tópico anterior Próximo tópico Novo tópico

ERRO AO DESSERIALIZAR JSON

C#

 Compartilhe  Compartilhe  Compartilhe
#496311 - 23/02/2021 16:52:15

ATSILVA
SAO PAULO
Cadast. em:Março/2014


Última edição em 23/02/2021 16:54:33 por ATSILVA

Estou obtendo erro System.InvalidOperationException: 'O tipo 'projeto.classeCategorias' não é suportado para desserialização de uma matriz.' ao desserializar JSON abaixo:

Alguém sabe o que pode ser?

[
    {
        'id': 8355906,
        'parent': 0,
        'subcategories': [
            8359763,
            8360020
        ],
        'created_at': '2021-02-23T13:23:07+00:00',
        'updated_at': '2021-02-23T18:38:50+00:00',
        'name': {
            'pt': 'Livro'
        },
        'handle': {
            'pt': 'administracao'
        },
        'description': {
            'pt': ''
        },
        'seo_title': {
            'pt': ''
        },
        'seo_description': {
            'pt': ''
        }
    },
    {
        'id': 8359763,
        'parent': 8355906,
        'subcategories': [
            8360007
        ],
        'created_at': '2021-02-23T18:25:01+00:00',
        'updated_at': '2021-02-23T18:39:05+00:00',
        'name': {
            'pt': 'Administração'
        },
        'handle': {
            'pt': 'contabilidade'
        },
        'description': {
            'pt': ''
        },
        'seo_title': {
            'pt': ''
        },
        'seo_description': {
            'pt': ''
        }
    },
    {
        'id': 8360007,
        'parent': 8359763,
        'subcategories': [],
        'created_at': '2021-02-23T18:39:16+00:00',
        'updated_at': '2021-02-23T18:39:16+00:00',
        'name': {
            'pt': 'Contabilidade'
        },
        'handle': {
            'pt': 'contabilidade1'
        },
        'description': {
            'pt': ''
        },
        'seo_title': {
            'pt': ''
        },
        'seo_description': {
            'pt': ''
        }
    },
    {
        'id': 8360020,
        'parent': 8355906,
        'subcategories': [],
        'created_at': '2021-02-23T18:39:43+00:00',
        'updated_at': '2021-02-23T18:39:43+00:00',
        'name': {
            'pt': 'Informática'
        },
        'handle': {
            'pt': 'informatica'
        },
        'description': {
            'pt': ''
        },
        'seo_title': {
            'pt': ''
        },
        'seo_description': {
            'pt': ''
        }
    },
    {
        'id': 8360022,
        'parent': 0,
        'subcategories': [
            8360033
        ],
        'created_at': '2021-02-23T18:39:57+00:00',
        'updated_at': '2021-02-23T18:39:57+00:00',
        'name': {
            'pt': 'Gibi'
        },
        'handle': {
            'pt': 'gibi'
        },
        'description': {
            'pt': ''
        },
        'seo_title': {
            'pt': ''
        },
        'seo_description': {
            'pt': ''
        }
    },
    {
        'id': 8360033,
        'parent': 8360022,
        'subcategories': [],
        'created_at': '2021-02-23T18:40:14+00:00',
        'updated_at': '2021-02-23T18:40:14+00:00',
        'name': {
            'pt': 'Turma da Mônica'
        },
        'handle': {
            'pt': 'turma-da-monica'
        },
        'description': {
            'pt': ''
        },
        'seo_title': {
            'pt': ''
        },
        'seo_description': {
            'pt': ''
        }
    }
]

*****************************************************************************************************************************************
ESTOU USANDO A CLASSE (criada através do EDIT / PASTE ESPECIAL / PASTE JSON AS CLASSES):
*****************************************************************************************************************************************


public class classeCategorias
    {
        public Class1 Property1 { get; set; }
    }

    public class Class1
    {
        public int id { get; set; }
        public int parent { get; set; }
        public int?[] subcategories { get; set; }
        public DateTime created_at { get; set; }
        public DateTime updated_at { get; set; }
        public Name name { get; set; }
        public Handle handle { get; set; }
        public Description description { get; set; }
        public Seo_Title seo_title { get; set; }
        public Seo_Description seo_description { get; set; }
    }

    public class Name
    {
        public string pt { get; set; }
    }

    public class Handle
    {
        public string pt { get; set; }
    }

    public class Description
    {
        public string pt { get; set; }
    }

    public class Seo_Title
    {
        public string pt { get; set; }
    }

    public class Seo_Description
    {
        public string pt { get; set; }
    }




#496313 - 23/02/2021 17:39:44

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Tenta assim:

    {
        public Class1[] Property1 { get; set; }
    }


_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#496317 - 24/02/2021 08:49:08

ATSILVA
SAO PAULO
Cadast. em:Março/2014


Última edição em 24/02/2021 09:52:21 por ATSILVA

Olá Kerplunk, coloquei conforme sugerido public Class1[] Property1 { get; set; } mas, ocorre o mesmo erro System.InvalidOperationException: 'O tipo 'projeto.classeCategorias' não é suportado para desserialização de uma matriz.'

Abaixo o comando para desserializar o JSON (é nele que ocorre o erro):

var JsonConvert = new JavaScriptSerializer();
classeCategorias classeCategorias = JsonConvert.Deserialize<classeCategorias>(arqJson);




#496318 - 24/02/2021 10:04:18

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe

Última edição em 24/02/2021 10:05:16 por KERPLUNK

Tenta assim:

public class Name    {
        public string pt { get; set; }
    }

    public class Handle    {
        public string pt { get; set; }
    }

    public class Description    {
        public string pt { get; set; }
    }

    public class SeoTitle    {
        public string pt { get; set; }
    }

    public class SeoDescription    {
        public string pt { get; set; }
    }

    public class Root    {
        public int id { get; set; }
        public int parent { get; set; }
        public List<int> subcategories { get; set; }
        public DateTime created_at { get; set; }
        public DateTime updated_at { get; set; }
        public Name name { get; set; }
        public Handle handle { get; set; }
        public Description description { get; set; }
        public SeoTitle seo_title { get; set; }
        public SeoDescription seo_description { get; set; }
    }


E o comando:

Root classeCategorias = JsonConvert.Deserialize<Root >(arqJson);




_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#496323 - 24/02/2021 12:21:23

ATSILVA
SAO PAULO
Cadast. em:Março/2014


Mesmo erro.



#496327 - 24/02/2021 14:32:41

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Estranho... tem certeza que o JSON é esse mesmo que está no arquivo?

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#496329 - 24/02/2021 15:54:45

ATSILVA
SAO PAULO
Cadast. em:Março/2014


Última edição em 24/02/2021 15:58:34 por ATSILVA

O formato é o que esta no post, porém, no C# ele vem com todas aquelas barras invertidas e \n também!
Além de estar com problema na acentuação (Administração esta vindo Administra\\u00e7\\u00e3o).

'[\n    {\n        \'id\': 8369593,\n        \'parent\': 0,\n        \'subcategories\': [\n            8369664\n        ],\n        \'created_at\': \'2021-02-24T17:28:22+00:00\',\n        \'updated_at\': \'2021-02-24T17:28:22+00:00\',\n        \'name\': {\n            \'pt\': \'Livro\'\n        },\n        \'handle\': {\n            \'pt\': \'livro\'\n        },\n        \'description\': {\n            \'pt\': \'\'\n        },\n        \'seo_title\': {\n            \'pt\': \'\'\n        },\n        \'seo_description\': {\n            \'pt\': \'\'\n        }\n    },\n    {\n        \'id\': 8369664,\n        \'parent\': 8369593,\n        \'subcategories\': [],\n        \'created_at\': \'2021-02-24T17:35:14+00:00\',\n        \'updated_at\': \'2021-02-24T17:35:14+00:00\',\n        \'name\': {\n            \'pt\': \'Administra\\u00e7\\u00e3o\'\n        },\n        \'handle\': {\n            \'pt\': \'administracao\'\n        },\n        \'description\': {\n            \'pt\': \'\'\n        },\n        \'seo_title\': {\n            \'pt\': \'\'\n        },\n        \'seo_description\': {\n            \'pt\': \'\'\n        }\n    }\n]'

Veja como estou obtendo o JSON no C#:

var client = new RestClient('https://api.tiendanube.com/v1/1492214/categories');
var request = new RestRequest(Method.GET);
request.AddHeader('Content-Type', 'application/json; charset=utf-8');
request.AddHeader('User-Agent', 'dados sigilosos removido');
request.AddHeader('Authentication', 'dados sigilosos removido');
IRestResponse responseData = client.Execute(request);




#496330 - 24/02/2021 16:17:56

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Tente as soluções daqui

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#496332 - 24/02/2021 20:27:08

OCELOT
SOROCABA
Cadast. em:Março/2012


Citação:
:
Olá Kerplunk, coloquei conforme sugerido public Class1[] Property1 { get; set; } mas, ocorre o mesmo erro System.InvalidOperationException: 'O tipo 'projeto.classeCategorias' não é suportado para desserialização de uma matriz.'

Abaixo o comando para desserializar o JSON (é nele que ocorre o erro):

var JsonConvert = new JavaScriptSerializer();
classeCategorias classeCategorias = JsonConvert.Deserialize<classeCategorias>(arqJson);

O seu problema parece ser que este json é um array de objetos e não um só objeto na raiz, tente mudar para
List<classeCategorias> classeCategorias = JsonConvert.Deserialize<List<classeCategorias>>(arqJson);




Resposta escolhida #496334 - 25/02/2021 04:43:02

JABA
CABO FRIO
Cadast. em:Agosto/2005


Última edição em 25/02/2021 04:44:30 por JABA

Tente assim:

List<Class1> categorias = JsonConvert.DeserializeObject<List<Class1>>(arqJson);



_______________________________________________________________________________________________

Se a alma ou esprito so imateriais, como eles fazem para se localizar quando o corpo est em movimento?



#496338 - 25/02/2021 11:11:01

ATSILVA
SAO PAULO
Cadast. em:Março/2014


Última edição em 25/02/2021 11:12:24 por ATSILVA

JABA, da forma que postou deu erro com o comando:

List<Class1> categorias = JsonConvert.DeserializeObject<List<Class1>>(arqJson);

porém com um pequena alteração funcionou perfeitamente:

List<Class1> categorias = JsonConvert.Deserialize<List<Class1>>(arqJson);

Muitíssimo obrigado a todos em especial ao JABA.




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por ATSILVA em 25/02/2021 11:13:14