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
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
- System.IO (percorsi, stream)
- JSON con System.Text.Json (opt-in, converter)
- Pattern semplici per l’analisi CSV