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 JSONPerson 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.