JSON z System.Text.Json (jawne wybieranie elementów, konwertery)
JSON zgodny z C# 6: proszę używać DataContractJsonSerializer wraz z [DataContract]/[DataMember] (elementy wybierane jawnie) oraz prostych zmian nazewnictwa podobnych do konwerterów.
JSON z System.Text.Json (jawne wybieranie elementów, konwertery) to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.
Plan obsługi JSON w C# 6
Cel: Serializować i deserializować JSON bez zewnętrznych pakietów.
- Używaj DataContractJsonSerializer
- Jawnie dołączaj członków za pomocą DataMember
- Dostosowuj nazwy za pomocą Name=
- Bezpiecznie zapisuj i odczytuj dane z plików
Model opt-in
W modelu opt-in oznacz typ za pomocą DataContract, a tylko uwzględniane członki za pomocą DataMember. Użyj Name=, aby określić klucze 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);
}
}
Serializacja do JSON
Utwórz obiekt DataContractJsonSerializer, zapisz dane do strumienia i zakoduj je jako ciąg 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"}
}
}
Deserializacja z JSON
Deserializuj dane, odczytując je ze strumienia. Wartości zostaną przypisane tylko polom oznaczonym 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);
}
}
Zapis i odczyt plików JSON
Trwale zapisuj JSON za pomocą FileStream w blokach using. Odzwierciedla to rzeczywiste aplikacje: ustawienia, małe porcje danych itp.
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);
}
}
Nazwy i proste konwersje
Dostosowywanie:
- Użyj Name= w DataMember, aby mapować nazwy właściwości (np. user_name)
- W przypadku wyliczeń oznacz każdą wartość za pomocą EnumMember
- W przypadku specjalnych formatów (dat, liczb) w C# 6 konwertuj dane na właściwość tekstową (ręczne mapowanie)
Zasada opt-in dla JSON
Podsumowanie
Podsumowanie: W C# 6 używaj DataContractJsonSerializer, jawnie dołączaj członków za pomocą DataMember, dostosowuj nazwy przez Name= oraz odczytuj i zapisuj dane, korzystając z bezpiecznych wzorców obsługi strumieni.
Często zadawane pytania
Czy lekcja „JSON z System.Text.Json (jawne wybieranie elementów, konwertery)” jest bezpłatna?
Tak — pełny tekst „JSON z System.Text.Json (jawne wybieranie elementów, konwertery)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „JSON z System.Text.Json (jawne wybieranie elementów, konwertery)”?
JSON zgodny z C# 6: proszę używać DataContractJsonSerializer wraz z [DataContract]/[DataMember] (elementy wybierane jawnie) oraz prostych zmian nazewnictwa podobnych do konwerterów. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.
Ile czasu zajmuje lekcja „JSON z System.Text.Json (jawne wybieranie elementów, konwertery)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- System.IO (ścieżki, strumienie)
- JSON z System.Text.Json (jawne wybieranie elementów, konwertery)
- Proste wzorce analizowania CSV