none
Deserializar Json com parâmetro raiz dinâmico RRS feed

  • Pergunta

  • Olá,

    Estou consumindo uma API Rest e possuo um retorno Json com a seguinte estrutura

    {

       "raiz_1" : {

                         "atributo_1":"valor 1",

                         "atributo_2":"valor 2"

                     }

       "raiz_2":{

                       "atributo_1":"valor 1",

                       "atributo_2":"valor 2"

                    }

    }

    Preciso jogar esse retorno para um objeto, porém quando tempo popular o objeto direto não reconhece pois a raiz é dinâmico (no caso seria os valores "raiz_1" e "raiz_2"). Como eu poderia fazer para deserializar esse Json? 

    • Editado Dhonatan Wesley terça-feira, 5 de março de 2019 12:34 correção
    terça-feira, 5 de março de 2019 12:33

Respostas

  • Acabei por descobrir uma maneira de se fazer, para quem está precisando ai vai a solução:

    Deserializei o JSon em um dicionário onde o atributo dinâmico é minha chave, e o valor é o objeto

    IDictionary<string, Objeto> oObjeto = new Dictionary<string, Objeto>();

    oObjeto = JsonConvert.DeserializeObject<Dictionary<string, Objeto>>(objetoJson);

    foreach ( string Key in oObjeto.Keys )
    {
        var resultado = oObjeto[Key].atributo_1.ToString();
    }

    Se alguem tiver uma outra maneira de fazer por favor postem ai

    • Marcado como Resposta Dhonatan Wesley quinta-feira, 4 de abril de 2019 14:34
    terça-feira, 5 de março de 2019 14:28

Todas as Respostas

  • Acabei por descobrir uma maneira de se fazer, para quem está precisando ai vai a solução:

    Deserializei o JSon em um dicionário onde o atributo dinâmico é minha chave, e o valor é o objeto

    IDictionary<string, Objeto> oObjeto = new Dictionary<string, Objeto>();

    oObjeto = JsonConvert.DeserializeObject<Dictionary<string, Objeto>>(objetoJson);

    foreach ( string Key in oObjeto.Keys )
    {
        var resultado = oObjeto[Key].atributo_1.ToString();
    }

    Se alguem tiver uma outra maneira de fazer por favor postem ai

    • Marcado como Resposta Dhonatan Wesley quinta-feira, 4 de abril de 2019 14:34
    terça-feira, 5 de março de 2019 14:28
  • Dhonatan,

    Mapeie seu JSON para objeto usando o site: jsonutils (ainda não consigo colocar link)

    A seguir o exemplo da conversão de JSON para objeto:

    json ->

    {"employees": [
                            {  "firstName":"John" , "lastName":"Doe" }, 
                            {  "firstName":"Anna" , "lastName":"Smith" }, 
                            { "firstName": "Peter" ,  "lastName": "Jones " }
                            ]
                            }

    objeto ->

        public class Employee
        {
    
            [JsonProperty("firstName")]
            public string firstName { get; set; }
    
            [JsonProperty("lastName")]
            public string lastName { get; set; }
        }
    
        public class Example
        {
    
            [JsonProperty("employees")]
            public IList<Employee> employees { get; set; }
        }

    Depois que vc receber o json no formato string utilize o código:

    using Newtonsoft.Json;


    var obj = JsonConvert.DeserializeObject<Example>(stringJson);


    Pronto. A variável obj é um um objeto do tipo Example que pode ser atribuída ao seu model no construtor.



    • Editado Davi Roque terça-feira, 2 de abril de 2019 19:54
    • Sugerido como Resposta Davi Roque quarta-feira, 3 de abril de 2019 11:47
    terça-feira, 2 de abril de 2019 19:53