JSON para tipos TypeScript / C#

Gera interfaces TypeScript ou classes C# a partir de um JSON de exemplo, inferindo tipos aninhados e campos opcionais e anuláveis.

Carregando…

Como usar

  1. Cole um JSON de exemplo (por exemplo, uma resposta de API) na caixa.
  2. Em Saída, escolha TypeScript interface ou C# class.
  3. Informe o Nome do tipo raiz para o tipo de nível superior (se ficar vazio, usa-se Root). Se o JSON for um array, os elementos viram um tipo com esse nome mais Item, como RootItem.
  4. O código é atualizado enquanto você digita. Cada objeto aninhado vira um tipo próprio com o nome da chave em PascalCase, e objetos dentro de um array recebem um nome no singular (items vira Item).
  5. Clique em Copiar para copiar o código. Se a entrada não for JSON válido, aparece JSON inválido com a mensagem do analisador.

Perguntas frequentes

Meu JSON é enviado a um servidor?
Não. Os tipos são gerados no seu navegador.
Como são definidos campos opcionais e anuláveis?
Objetos do mesmo array são combinados em um único tipo. Um campo ausente em alguns deles é opcional (um ? após o nome em TypeScript, um tipo anulável em C#), e um campo que é null em algum ponto do exemplo recebe | null em TypeScript e ? em C#.
Quais tipos numéricos são usados?
O TypeScript usa number para todos os números. Em C#, inteiros viram int, inteiros fora da faixa de int (±2147483647) viram long e números com casas decimais viram double; se um campo misturar esses casos, usa-se o mais amplo. Observe que 1.0 no JSON conta como inteiro.
E arrays mistos, arrays vazios e campos que são só null?
No TypeScript, valores de tipos diferentes formam uma união como string | number, então um array misto vira (string | number)[]. O C# não tem uniões e usa object. Um array vazio vira unknown[] ou List<object>, e um campo que é sempre null vira null ou object?.
Como são escolhidos os nomes das propriedades em C#?
As chaves JSON são convertidas para PascalCase (user_id vira UserId). Quando o nome da propriedade difere da chave, um atributo [JsonPropertyName] do System.Text.Json preserva a chave original; no TypeScript, chaves que não são identificadores válidos ficam entre aspas.