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
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
- System.IO (caminhos, fluxos)
- JSON com System.Text.Json (adesão explícita, conversores)
- Padrões simples de análise de CSV