Dowiedziałem się, że niektóre klasy używają tego [Serializable]
atrybutu.
- Co to jest?
- Kiedy powinienem go użyć?
- Jakie korzyści otrzymam?
c#
.net
serialization
Kevin
źródło
źródło
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-meanOdpowiedzi:
Co to jest?
Podczas tworzenia obiektu w aplikacji .NET Framework nie musisz myśleć o tym, jak dane są przechowywane w pamięci. Ponieważ .Net Framework dba o to za Ciebie. Jeśli jednak chcesz zapisać zawartość obiektu do pliku, wysłać obiekt do innego procesu lub przesłać go przez sieć, musisz pomyśleć o tym, jak obiekt jest reprezentowany, ponieważ będziesz musiał przekonwertować go na inny format . Ta konwersja nosi nazwę SERIALIZATION.
Zastosowania do serializacji
Serializacja pozwala deweloperowi zapisać stan obiektu i odtworzyć go w razie potrzeby, zapewniając przechowywanie obiektów oraz wymianę danych. Dzięki serializacji deweloper może wykonywać takie czynności, jak wysyłanie obiektu do aplikacji zdalnej za pomocą usługi sieci Web, przekazywanie obiektu z jednej domeny do drugiej, przekazywanie obiektu przez zaporę jako ciąg XML lub utrzymywanie zabezpieczeń lub specyficznych dla użytkownika informacje między aplikacjami.
Zastosuj
SerializableAttribute
do typu, aby wskazać, że instancje tego typu mogą być serializowane. Zastosuj,SerializableAttribute
nawet jeśli klasa implementuje równieżISerializable
interfejs do sterowania procesem serializacji.Wszystkie pola publiczne i prywatne w typie oznaczonym przez
SerializableAttribute
są domyślnie serializowane, chyba że typ implementujeISerializable
interfejs w celu zastąpienia procesu serializacji. Domyślny proces serializacji wyklucza pola oznaczoneNonSerializedAttribute
. Jeśli pole typu możliwego do serializacji zawiera wskaźnik, uchwyt lub inną strukturę danych, która jest specyficzna dla określonego środowiska i nie może być znacząco odtworzona w innym środowisku, możesz zastosowaćNonSerializedAttribute
to pole.Aby uzyskać więcej informacji, zobacz MSDN .
Edytuj 1
Podczas przesyłania lub zapisywania danych musisz wysłać lub zapisać tylko wymagane dane. Dzięki temu będzie mniej opóźnień transferu i problemów z pamięcią. Możesz więc zrezygnować z niepotrzebnego fragmentu danych podczas serializacji.
źródło
Kilka praktycznych zastosowań tego
[Serializable]
atrybutu:BinaryFormatter
klasę w System.Runtime.Serialization.Formatters.BinaryClipboard.SetData()
- nie można umieszczać w schowku klas, których nie można wydzielić.MarshalByRefObject
) musi być możliwa do serializacji.Są to najczęstsze przypadki użycia, z którymi się spotkałem.
źródło
Ponieważ oryginalne pytanie dotyczyło SerializableAttribute, należy zauważyć, że ten atrybut ma zastosowanie tylko w przypadku korzystania z BinaryFormatter lub SoapFormatter.
Jest to trochę mylące, chyba że naprawdę zwracasz uwagę na szczegóły, co do tego, kiedy go użyć i jaki jest jego rzeczywisty cel.
Nie ma to nic wspólnego z serializacją XML lub JSON.
Wraz z SerializableAttribute stosuje się interfejs ISerializable i klasę SerializationInfo. Są one również używane tylko z BinaryFormatter lub SoapFormatter.
O ile nie zamierzasz serializować swojej klasy za pomocą Binarnego lub Mydła, nie zawracaj sobie głowy oznaczaniem swojej klasy jako [Serializable]. Serializatory XML i JSON nawet nie są świadome jego istnienia.
źródło
Serializable
, i bez, gdy atrybut został usunięty. Tak więc możliwe są pewne zakłócenia.Jak działa serializacja?
Ta ilustracja pokazuje 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.
Szczegóły w msdn.
źródło
Oto krótki przykład działania serializacji. Uczyłem się również o tym samym i znalazłem dwa przydatne linki. Co to jest serializacja i jak można to zrobić w .NET .
Przykładowy program wyjaśniający serializację
Jeśli nie rozumiesz powyższego programu, podany jest tutaj bardzo prosty program z wyjaśnieniem .
źródło
Serializacja
Serializacja to proces przekształcania wykresu obiektu lub zestawu obiektów w strumień, w przypadku serializacji binarnej jest to tablica bajtów
Zastosowania serializacji
Poniżej znajduje się kilka przydatnych niestandardowych atrybutów używanych podczas serializacji obiektu
[Serializable] -> Jest używany, gdy zaznaczamy obiekt do serializacji [NonSerialized] -> Jest używany, gdy nie chcemy serializować pola obiektu. [OnSerializing] -> Jest używany, gdy chcemy wykonać jakąś akcję podczas serializacji obiektu [OnSerialized] -> Jest używany, gdy chcemy wykonać jakąś akcję po serializacji obiektu do strumienia.
Poniżej znajduje się przykład serializacji
Oto kod wywołujący
źródło