3
respostas

Objeto dinâmico não disponibiliza acesso a todos os atributos

Estou construindo uma abstração para lidar genericamente com qualquer API Rest dentro de um outro software que foi construído para ser uma linguagem interpretada que incorpora funções previamente construídas em C#.

Minha variável dinâmica recebe um objeto Json (JToken) da biblioteca NewtonSoft e eu só consigo acessar o atributo "Type" se eu fizer um cast para o tipo JToken antes; entretanto, eu consigo visualizar esse atributo dentro da variável quando vou debugando linha a linha.

Imagens para ilustrar https://imgur.com/a/m9GGAGg

3 respostas

Fala, Caio, bom dia.

Coloca aqui pra gente a mensagem de erro que está recebendo. A imagem mostra que o atributo Type está disponível. Mostra o código em seguida e qual erro está sendo gerado, por favor.

Ficamos no aguardo.

Bom dia Daniel,

não encontrei uma maneira super simples de explicar a situação por imagens então resolvi criar um código de exemplo e um video para ilustrar. Estou usando a versão 6.0.4 da bibioteca NewtonSoft.Json

No link do drive abaixo está disponível o arquivo Json4.txt e o video ilustrativo do problema que é evidenciado na linha 26 ou 29.

https://drive.google.com/drive/folders/1kFPObGpvLWPP9t4aMSvtxnRji4w2foHU?usp=sharing

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;


using Newtonsoft.Json.Linq;

namespace TesteAlura
{
    class Program
    {
        static void Main(string[] args)
        {
            var jsonString = File.ReadAllText("Json4.txt");
            var jsonObject = JValue.Parse(jsonString);

            var JsonObject_1 = jsonObject;

            dynamic JsonObject_2 = jsonObject;


            dynamic d_type_1 = JsonObject_1.Type;
            dynamic d_type_2 = JsonObject_2.Type;

            JTokenType j_type_1 = JsonObject_1.Type;
            JTokenType j_type_2 = JsonObject_2.Type;

        }
    }
}

Opa, Caio, tudo bem?

Não consegui acessar o vídeo mas testei aqui seu código. A mensagem de erro que tomei foi na última linha com o texto Requested value 'Tipo do Objeto' was not found (no caso Tipo do objeto é o valor do atributo Type no meu json).

Tô achando melhor vc seguir por outros caminhos em seu código:

  • ou mantém o cast para o tipo JToken conforme mencionou
  • ou parte para outra estratégia de solução. Provavelmente esta abstração que você está tentando pensar não está te ajudando. Lembre-se: abstrações foram feitas pra auxiliar no código, não dificultar. Se quiser podemos discutir outras abstrações, mas aí preciso de maiores detalhes do seu problema.

Espero ter ajudado. Daniel Portugal.