0Pricing
C# Academy · Aula

JSON com System.Text.Json (adesão explícita, conversores)

JSON compatível com C# 6: use DataContractJsonSerializer com [DataContract]/[DataMember] (membros incluídos explicitamente) e ajustes simples de nomes semelhantes aos de conversores.

JSON com System.Text.Json (adesão explícita, conversores) é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.

JSON no C# 6: plano

Objetivo: Serializar e desserializar JSON sem pacotes externos.

  • Use DataContractJsonSerializer
  • Inclua membros explicitamente por meio de DataMember
  • Personalize nomes com Name=
  • Grave e leia arquivos com segurança

Modelo com inclusão explícita

Modelo com inclusão explícita: marque o tipo com DataContract e somente os membros incluídos com DataMember. Use Name= para controlar as chaves JSON.

using System;
using System.Runtime.Serialization;

[DataContract] // opt-in: only [DataMember] will be serialized
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }

  // Not included: no DataMember
  public string InternalNote { get; set; }
}

public class Program
{
  public static void Main(string[] args)
  {
    User u = new User { Id = 7, Name = "Ada", InternalNote = "hidden" };
    Console.WriteLine("Ready to serialize: " + u.Name);
  }
}

Serializar para JSON

Crie um DataContractJsonSerializer, grave em um fluxo e codifique como UTF-8 em uma cadeia de caracteres.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

[DataContract]
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }

  public string InternalNote { get; set; }
}

public class Program
{
  public static string ToJson(User u)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
    using (MemoryStream ms = new MemoryStream())
    {
      ser.WriteObject(ms, u);
      return Encoding.UTF8.GetString(ms.ToArray());
    }
  }

  public static void Main(string[] args)
  {
    User u = new User { Id = 1, Name = "Ada", InternalNote = "not saved" };
    string json = ToJson(u);
    Console.WriteLine(json); // {"id":1,"name":"Ada"}
  }
}

Desserializar a partir de JSON

Faça a desserialização lendo de um fluxo. Somente os campos marcados com DataMember são preenchidos.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

[DataContract]
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }
}

public class Program
{
  public static User FromJson(string json)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
    byte[] bytes = Encoding.UTF8.GetBytes(json);
    using (MemoryStream ms = new MemoryStream(bytes))
    {
      return (User)ser.ReadObject(ms);
    }
  }

  public static void Main(string[] args)
  {
    string json = "{\"id\":42,\"name\":\"Bob\"}";
    User u = FromJson(json);
    Console.WriteLine(u.Id + " - " + u.Name);
  }
}

Salvar e carregar arquivos JSON

Persista JSON com FileStream em blocos using. Isso reproduz o funcionamento de aplicativos reais: configurações, dados pequenos etc.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

[DataContract]
public sealed class Settings
{
  [DataMember(Name = "theme")]
  public string Theme { get; set; }

  [DataMember(Name = "notifications")]
  public bool Notifications { get; set; }
}

public class Program
{
  public static void Save(string path, Settings s)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Settings));
    using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
    {
      ser.WriteObject(fs, s);
    }
  }

  public static Settings Load(string path)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Settings));
    using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
    {
      return (Settings)ser.ReadObject(fs);
    }
  }

  public static void Main(string[] args)
  {
    string path = "settings.json";
    Save(path, new Settings { Theme = "dark", Notifications = true });
    Settings loaded = Load(path);
    Console.WriteLine(loaded.Theme + " / " + loaded.Notifications);
  }
}

Nomes e conversões simples

Personalize:

  • Use Name= em DataMember para mapear nomes de propriedades (por exemplo, user_name)
  • Para enumerações, marque cada valor com EnumMember
  • Para formatos especiais (datas, números), converta para uma propriedade de cadeia de caracteres (mapeamento manual) no C# 6

Regra de inclusão explícita para JSON

Verificação rápida: com DataContractJsonSerializer, como incluir no JSON somente determinadas propriedades?

Recapitulação

Recapitulação: use DataContractJsonSerializer no C# 6, inclua membros explicitamente com DataMember, ajuste os nomes por meio de Name= e leia e grave usando padrões seguros para fluxos.

Perguntas Frequentes

A aula “JSON com System.Text.Json (adesão explícita, conversores)” é grátis?

Sim — o texto completo de “JSON com System.Text.Json (adesão explícita, conversores)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.

O que vou aprender em “JSON com System.Text.Json (adesão explícita, conversores)”?

JSON compatível com C# 6: use DataContractJsonSerializer com [DataContract]/[DataMember] (membros incluídos explicitamente) e ajustes simples de nomes semelhantes aos de conversores. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 3.

Quanto tempo leva a aula “JSON com System.Text.Json (adesão explícita, conversores)”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. System.IO (caminhos, fluxos)
  2. JSON com System.Text.Json (adesão explícita, conversores)
  3. Padrões simples de análise de CSV
← Voltar para C# Academy