Como gerar automaticamente um arquivo de classe C # a partir de uma string JSON [fechado]


108

Dado o seguinte objeto JSON,

form = {
  "name": "",
  "address": {
    "street": "",
    "city": "",
    "province": "",
    "postalCode": "",
    "country": ""
  },
  "phoneDay": "",
  "phoneCell": "",
  "businessName": "",
  "website": "",
  "email": ""
}

o que é uma ferramenta para gerar automaticamente a seguinte classe C #?

public class ContactInfo
{
    public string Name { get; set; }
    public Address Address { get; set; }
    public string PhoneDay { get; set; }
    public string PhoneCell { get; set; }
    public string BusinessName { get; set; }
    public string Website { get; set; }
    public string Email { get; set; }
}

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string Province { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
}

Já vimos estas questões:

Gerar classes C # a partir do esquema JSON Está perguntando sobre esquemas JSON, que pode ser uma abordagem para usar no futuro.

Benefícios e desvantagens das classes C # geradas para objetos Json



tente esta ferramenta pode ajudar .. tools4geeks.com/json-to-Csharp-classes
Dheeraj Palagiri

Alguém sabe fazer a mesma coisa com Swagger YAML?
ryanwebjackson

Infelizmente json2charp.com agora é um domínio à venda. Isso é péssimo, e o Quicktipe é meio desajeitado. Alguém conhece uma alternativa melhor?
DARKGuy

@DARKGuy jsonutils jsonutils.com
Rafael

Respostas:


146

Cinco opções:

  • Use a ferramenta gratuita da web jsonutils sem instalar nada.

  • Se você tiver o Web Essentials no Visual Studio, use Editar> Colar especial> colar JSON como classe.

  • Use o jsonclassgenerator .exe gratuito

  • A ferramenta da web app.quicktype.io não requer instalação de nada.

  • A ferramenta web json2csharp também não requer instalação de nada.

Prós e contras:

  • jsonclassgenerator converte para PascalCase, mas os outros não.

  • app.quicktype.io tem alguma lógica para reconhecer dicionários e lidar com propriedades JSON cujos nomes são identificadores c # inválidos.


tanto o Web Essentials quanto o json2csharp estão fazendo um ótimo trabalho. Não tentei jsonclassgenerator, porque parecia um incômodo precisar abrir um aplicativo separado só para isso
Zoran P.

1
Eu não tentei jsonclassgenerator, mas posso ver a vantagem. Por exemplo, se você tiver uma API simulada, poderá interagir com um conjunto de pontos de extremidade para regenerar seus modelos. Você poderia ir tão longe quanto configurar um script que verifica se há novos commits e atualiza o modelo se algo mudou. Você não gostaria de colar new json manualmente todas as vezes, pois isso pode estar sujeito a erros.
Billy Jake O'Connor

A ferramenta json2csharp faz um trabalho melhor do que o VS de formatar as classes, especialmente os nomes das classes. Ele removerá caracteres ambíguos como "_" e colocará corretamente os nomes das classes em maiúsculas.
big_water

2
"jsonutils" é muito legal, pode gerar atributos como "propriedades Json" também, jsonutils.com
Dhanuka777

app.quicktype.io este não funciona em algumas máquinas devido a questões de segurança.
Sean Ch

121

Visual Studio 2012 (com ASP.NET e Web Tools 2012.2 RC instalado) oferece suporte nativo .

Visual Studio 2013 em diante tem isso integrado.

Captura de tela do Visual Studio Colar JSON como Classes (Imagem cortesia: robert.muehsig )


4
Acho que essa solução é a melhor, pois você não vai precisar de um programa externo!
Abraão Caldas

antes de colar, aqui está a solução para Copiar JSON do console.log na ferramenta do desenvolvedor para a área de transferência. A esperança ajuda.
shaijut

10

Se você instalar o Web Essentials no Visual Studio, você pode ir para Editar => Especial anterior => colar JSON como classe.

Isso é provavelmente o mais fácil que existe.

Web Essentials: http://vswebessentials.com/

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.