Skip to content

Zadanie 29

Czym jest serializacja obiektów w języku C#?

Serializacja to zamiana obiektu (jego stanu, czyli wartości pól) na postać nadającą się do zapisu lub przesłania, np. strumień bajtów, tekst XML albo JSON. Deserializacja to proces odwrotny: odtworzenie obiektu z takiej postaci. Dzięki temu obiekt można zapisać do pliku, przesłać siecią (API) lub przechować w pamięci podręcznej, a później odtworzyć.

Rodzaje serializacji. Trzy główne formaty:

  • JSON - tekstowy, obsługiwany przez System.Text.Json (klasa JsonSerializer).
  • XML - tekstowy, obsługiwany przez XmlSerializer.
  • Binarny - zapis obiektu jako strumień bajtów (nieczytelny dla człowieka, kompaktowy); dziś odradzany, bo bywa niebezpieczny (deserializacja niezaufanych danych umożliwiała ataki).

Przykład na JSON - JsonSerializer zamienia obiekt na tekst i z powrotem:

using System.Text.Json;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person p = new Person { Name = "Ala", Age = 20 };
// serializacja - obiekt na tekst JSON: {"Name":"Ala","Age":20}
string json = JsonSerializer.Serialize(p);
// deserializacja - odtworzenie obiektu z tekstu JSON
Person restored = JsonSerializer.Deserialize<Person>(json);

Atrybutami nakładanymi na właściwości można wpłynąć na to, jak obiekt jest serializowany, np. dla JSON:

  • [JsonPropertyName("full_name")] - inna nazwa właściwości w JSON.
  • [JsonIgnore] - pominięcie pola (np. danych wrażliwych).
  • [JsonPropertyOrder(1)] - kolejność właściwości w wyniku.

Skrót do zapamiętania: Serializacja to zamiana obiektu na zapisywalną/przesyłalną postać (bajty, XML, JSON), deserializacja to proces odwrotny. W C#: JsonSerializer, XmlSerializer, atrybut [Serializable].

  • Serializacja: obiekt -> bajty/XML/JSON (do zapisu lub przesłania).
  • Deserializacja: postać zapisana -> obiekt.
  • Rodzaje: JSON (dziś najczęstszy), XML, binarny (BinaryFormatter - odradzany, bo niebezpieczny).
  • Narzędzia: JsonSerializer (System.Text.Json), XmlSerializer (System.Xml.Serialization).
  • Zastosowanie: zapis do pliku, przesył siecią, API, cache.