0Pricing
C# Academy · Lezione

JSON con System.Text.Json (opt-in, converter)

JSON compatibile con C# 6: usate DataContractJsonSerializer con [DataContract]/[DataMember] (membri opt-in) e semplici modifiche ai nomi analoghe ai converter.

JSON con System.Text.Json (opt-in, converter) è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.

Piano per JSON in C# 6

Obiettivo: serializzare e deserializzare JSON senza pacchetti esterni.

  • Usare DataContractJsonSerializer
  • Includere esplicitamente i membri tramite DataMember
  • Personalizzare i nomi con Name=
  • Scrivere e leggere file in modo sicuro

Modello a inclusione esplicita

Modello a inclusione esplicita: contrassegnare il tipo con DataContract e solo i membri inclusi con DataMember. Usare Name= per controllare le chiavi 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);
  }
}

Serializzazione in JSON

Creare un DataContractJsonSerializer, scrivere in uno stream e codificare la stringa in UTF-8.

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

Deserializzazione da JSON

Deserializzare leggendo da uno stream. Vengono valorizzati solo i campi 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);
  }
}

Salvataggio e caricamento di file JSON

Salvare JSON in modo persistente usando FileStream all'interno di blocchi using. È un approccio simile a quello delle applicazioni reali: impostazioni, piccoli dati e così via.

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

Nomi e conversioni semplici

Personalizzazione:

  • Usare Name= in DataMember per mappare i nomi delle proprietà (ad es. user_name)
  • Per gli enum, contrassegnare ogni valore con EnumMember
  • Per formati speciali (date, numeri), convertire in una proprietà stringa (mappatura manuale) in C# 6

Regola di inclusione esplicita per JSON

Verifica rapida: con DataContractJsonSerializer, come si includono esplicitamente solo determinate proprietà nel JSON?

Riepilogo

Riepilogo: usare DataContractJsonSerializer in C# 6, includere esplicitamente i membri con DataMember, modificare i nomi tramite Name= e leggere o scrivere usando pattern sicuri per gli stream.

Domande Frequenti

La lezione «JSON con System.Text.Json (opt-in, converter)» è gratuita?

Sì — il testo completo di «JSON con System.Text.Json (opt-in, converter)» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.

Cosa imparerò in «JSON con System.Text.Json (opt-in, converter)»?

JSON compatibile con C# 6: usate DataContractJsonSerializer con [DataContract]/[DataMember] (membri opt-in) e semplici modifiche ai nomi analoghe ai converter. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.

Quanto tempo richiede la lezione «JSON con System.Text.Json (opt-in, converter)»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. System.IO (percorsi, stream)
  2. JSON con System.Text.Json (opt-in, converter)
  3. Pattern semplici per l’analisi CSV
← Torna a C# Academy