0Pricing
C# Academy · Lección

JSON con System.Text.Json (opt-in y converters)

JSON compatible con C# 6: use DataContractJsonSerializer con [DataContract]/[DataMember] (miembros opt-in) y ajustes sencillos de nombres similares a los converters.

JSON con System.Text.Json (opt-in y converters) es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.

JSON en C# 6: plan

Objetivo: Serializar y deserializar JSON sin paquetes externos.

  • Use DataContractJsonSerializer
  • Incluya miembros de forma explícita mediante DataMember
  • Personalice los nombres con Name=
  • Escriba y lea archivos de forma segura

Modelo opt-in

En el modelo opt-in, marque el tipo con DataContract y solo los miembros incluidos con DataMember. Use Name= para controlar las claves 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 a JSON

Cree un DataContractJsonSerializer, escriba en un stream y codifique el resultado en UTF-8 para obtener una cadena.

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"}
  }
}

Deserializar desde JSON

Deserialice leyendo desde un stream. Solo se rellenan los campos marcados con DataMember.

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);
  }
}

Guardar y cargar archivos JSON

Conserve JSON mediante FileStream dentro de bloques using. Este patrón refleja el uso en aplicaciones reales: configuraciones, datos pequeños, 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);
  }
}

Nombres y conversiones sencillas

Personalización:

  • Use Name= en DataMember para asignar nombres a las propiedades (por ejemplo, user_name)
  • Para las enumeraciones, marque cada valor con EnumMember
  • Para formatos especiales (fechas y números), conviértalos en una propiedad de tipo cadena (asignación manual) en C# 6

Regla opt-in para JSON

Comprobación rápida: Con DataContractJsonSerializer, ¿cómo se incluyen explícitamente solo ciertas propiedades en JSON?

Resumen

Resumen: Use DataContractJsonSerializer en C# 6, incluya miembros mediante DataMember, ajuste los nombres con Name= y lea y escriba usando patrones seguros para streams.

Preguntas frecuentes

¿La lección «JSON con System.Text.Json (opt-in y converters)» es gratis?

Sí — el texto completo de «JSON con System.Text.Json (opt-in y converters)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.

¿Qué aprenderé en «JSON con System.Text.Json (opt-in y converters)»?

JSON compatible con C# 6: use DataContractJsonSerializer con [DataContract]/[DataMember] (miembros opt-in) y ajustes sencillos de nombres similares a los converters. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.

¿Cuánto tiempo toma la lección «JSON con System.Text.Json (opt-in y converters)»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. System.IO (rutas y streams)
  2. JSON con System.Text.Json (opt-in y converters)
  3. Patrones sencillos para analizar CSV
← Volver a C# Academy