0Pricing
C# Academy · Lekcja

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

Szybkie sprawdzenie: Jak za pomocą DataContractJsonSerializer włączyć do serializacji tylko niektóre właściwości?

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

  1. System.IO (ścieżki, strumienie)
  2. JSON z System.Text.Json (jawne wybieranie elementów, konwertery)
  3. Proste wzorce analizowania CSV
← Powrót do C# Academy