Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Serializacja to proces konwertowania obiektu na strumień bajtów w celu przechowywania obiektu lub przesyłania go do pamięci, bazy danych lub pliku. Jego głównym celem jest zapisanie stanu obiektu w celu ponownego utworzenia go w razie potrzeby. Proces odwrotny jest nazywany deserializacją.
Jak działa serializacja
Na tej ilustracji przedstawiono ogólny proces serializacji.
Obiekt jest serializowany do strumienia, który przenosi nie tylko dane, ale informacje o typie obiektu, takie jak jego wersja, kultura i nazwa zestawu. Z tego strumienia można go przechowywać w bazie danych, pliku lub pamięci.
Zastosowania do serializacji
Serializacja umożliwia deweloperowi zapisanie stanu obiektu i ponowne utworzenie go w razie potrzeby, zapewniając przechowywanie obiektów, a także wymianę danych. Dzięki serializacji deweloper może wykonywać akcje, takie jak wysyłanie obiektu do aplikacji zdalnej za pomocą usługi sieci Web, przekazywanie obiektu z jednej domeny do innej, przekazywanie obiektu przez zaporę jako ciąg XML lub utrzymywanie zabezpieczeń lub informacji specyficznych dla użytkownika w aplikacjach.
Serializacja JSON
System.Text.Json Przestrzeń nazw zawiera klasy do serializacji i deserializacji JavaScript Object Notation (JSON). JSON to otwarty standard, który jest często używany do udostępniania danych w Internecie.
Serializacja JSON serializuje publiczne właściwości obiektu do ciągu, tablicy bajtów lub strumienia zgodnego ze specyfikacją JSON RFC 8259. Aby kontrolować sposób JsonSerializer serializacji lub deserializacji wystąpienia klasy, można użyć jednego lub więcej z następujących podejść:
- Użyj obiektu JsonSerializerOptions
- Stosowanie atrybutów z System.Text.Json.Serialization przestrzeni nazw do klas lub właściwości
- Dostosowywanie kontraktu
- Implementowanie konwerterów niestandardowych
Serializacja binarna i XML
System.Runtime.Serialization Przestrzeń nazw zawiera klasy serializacji binarnej i XML oraz deserializacji.
W serializacji binarnej wszystkie elementy członkowskie, nawet te, które są tylko do odczytu, są serializowane, a wydajność jest zwiększona. Serializacja XML zapewnia bardziej czytelny kod, a także większą elastyczność udostępniania obiektów i użycia w celach współdziałania.
Ostrzeżenie
Serializacja binarna z BinaryFormatter może być niebezpieczna. Aby uzyskać więcej informacji, zobacz Przewodnik po zabezpieczeniach BinaryFormatter i Przewodnik migracji BinaryFormatter.
Tworzenie obiektu z możliwością serializacji
Aby zserializować obiekt przy użyciu serializacji binarnej lub XML, potrzebujesz obiektu do serializacji, strumienia do umieszczenia zserializowanego obiektu i Formatter. System.Runtime.Serialization zawiera klasy niezbędne do serializacji i deserializacji obiektów.
SerializableAttribute Zastosuj atrybut do typu, aby wskazać, że wystąpienia tego typu mogą być serializowane. Wyjątek SerializationException jest zgłaszany, jeśli próbujesz serializować, ale typ nie ma atrybutu SerializableAttribute .
Jeśli nie chcesz, aby pole w klasie było możliwe do serializacji, zastosuj NonSerializedAttribute atrybut . Jeśli pole typu serializowalnego zawiera wskaźnik, uchwyt lub inną strukturę danych specyficzną dla określonego środowiska i nie można go znacząco odtworzyć w innym środowisku, to może być konieczne, aby było nieserializowalne.
Jeśli serializowana klasa zawiera odwołania do obiektów innych klas, które są oznaczone SerializableAttribute, te obiekty również będą serializowane.
Serializacja binarna
Serializacja binarna używa kodowania binarnego, aby tworzyć kompaktową serializację do zastosowań, takich jak przechowywanie lub strumienie sieciowe oparte na gniazdach.
Serializacja XML
Serializacja XML serializuje pola publiczne i właściwości obiektu lub parametry i zwracane wartości metod do strumienia XML zgodnego z określonym dokumentem języka definicji schematu XML (XSD). Serializacja XML prowadzi do powstania silnie typizowanych klas z publicznymi właściwościami i polami, które są konwertowane na XML. System.Xml.Serialization zawiera klasy niezbędne do serializacji i deserializacji XML.
Atrybuty można stosować w klasach i ich składowych w celu kontrolowania procesu, w jaki sposób XmlSerializer serializuje lub deserializuje wystąpienie klasy.
Serializacja podstawowa i niestandardowa
Serializacji binarnej i XML można wykonywać na dwa sposoby: podstawowy i niestandardowy. Serializacja podstawowa używa platformy .NET do automatycznego serializowania obiektu.
Jedynym wymaganiem w podstawowej serializacji jest to, że obiekt ma zastosowany atrybut SerializableAttribute. Element NonSerializedAttribute może służyć do zapobiegania serializacji określonych pól.
W przypadku korzystania z podstawowej serializacji przechowywanie wersji obiektów może powodować problemy, w tym przypadku preferowana może być niestandardowa serializacja. Serializacja podstawowa to najprostszy sposób wykonywania serializacji, ale nie zapewnia dużej kontroli nad procesem.
W niestandardowej serializacji można określić dokładnie, które obiekty będą serializowane i jak to zostanie zrobione. Klasa musi być oznaczona SerializableAttribute i implementować ISerializable interfejs. Jeśli chcesz, aby obiekt był deserializowany w niestandardowy sposób, należy również użyć konstruktora niestandardowego.
Serializacja projektanta
Serializacja projektanta to specjalna forma serializacji, która obejmuje rodzaj trwałości obiektu zwykle skojarzonej z narzędziami programistycznymi. Serializacja przez projektanta to proces przekształcania grafu obiektu na plik źródłowy, który później może służyć do odzyskania grafu obiektu. Plik źródłowy może zawierać kod, znaczniki, a nawet informacje o tabeli SQL.
Powiązane artykuły
Porady: odczytywanie danych obiektu z pliku XML (Visual Basic)
Pokazuje, jak odczytywać dane obiektów, które zostały wcześniej zapisane w pliku XML przy użyciu XmlSerializer klasy .
Porady: zapisywanie danych obiektów w pliku XML (Visual Basic)
Pokazuje, jak zapisać obiekt z klasy do pliku XML przy użyciu XmlSerializer klasy .