Я обнаружил, что некоторые классы используют этот [Serializable]
атрибут.
- Что это?
- Когда я должен использовать это?
- Какие преимущества я получу?
c#
.net
serialization
Кевин
источник
источник
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-meanОтветы:
Что это?
Когда вы создаете объект в приложении .Net Framework, вам не нужно думать о том, как данные хранятся в памяти. Потому что .Net Framework позаботится об этом за вас. Однако, если вы хотите сохранить содержимое объекта в файл, отправить объект другому процессу или передать его по сети, вам нужно подумать о том, как представлен объект, потому что вам нужно будет преобразовать его в другой формат. , Это преобразование называется СЕРИАЛИЗАЦИЯ.
Использует для сериализации
Сериализация позволяет разработчику сохранять состояние объекта и воссоздавать его по мере необходимости, обеспечивая хранение объектов, а также обмен данными. Посредством сериализации разработчик может выполнять такие действия, как отправка объекта в удаленное приложение с помощью веб-службы, передача объекта из одного домена в другой, передача объекта через брандмауэр в виде строки XML или поддержание безопасности или пользовательского уровня. информация между приложениями.
Применить
SerializableAttribute
к типу, чтобы указать, что экземпляры этого типа могут быть сериализованы. ПрименитеSerializableAttribute
даже если класс также реализуетISerializable
интерфейс для управления процессом сериализации.Все открытые и закрытые поля в типе, помеченные
SerializableAttribute
символом, сериализуются по умолчанию, если только тип не реализуетISerializable
интерфейс для переопределения процесса сериализации. Процесс сериализации по умолчанию исключает поля, отмеченные значкомNonSerializedAttribute
. Если поле сериализуемого типа содержит указатель, дескриптор или некоторую другую структуру данных, которая специфична для конкретной среды и не может быть разумно восстановлена в другой среде, тогда вы можете применитьNonSerializedAttribute
к этому полю.Смотрите MSDN для более подробной информации.
Редактировать 1
При передаче или сохранении данных вам нужно отправлять или сохранять только необходимые данные. Таким образом, будет меньше задержек передачи и проблем с хранением. Таким образом, вы можете отказаться от ненужного куска данных при сериализации.
источник
Некоторые практические применения для
[Serializable]
атрибута:BinaryFormatter
класс в System.Runtime.Serialization.Formatters.BinaryClipboard.SetData()
- несериализуемые классы не могут быть помещены в буфер обмена.MarshalByRefObject
), должен быть сериализуемым.Это наиболее распространенные случаи использования, с которыми я сталкивался.
источник
Поскольку первоначальный вопрос касался атрибута SerializableAttribute, следует отметить, что этот атрибут применяется только при использовании BinaryFormatter или SoapFormatter.
Это немного сбивает с толку, если вы действительно не обращаете внимание на детали, когда и как его использовать и какова его реальная цель.
Это НИЧЕГО не связано с сериализацией XML или JSON.
С SerializableAttribute используются интерфейс ISerializable и класс SerializationInfo. Они также используются только с BinaryFormatter или SoapFormatter.
Если вы не собираетесь сериализовать свой класс с использованием Binary или Soap, не пытайтесь пометить свой класс как [Serializable]. Сериализаторы XML и JSON даже не знают о его существовании.
источник
Serializable
, и без, когда атрибут был удален. Так что некоторые помехи возможны.Как работает сериализация
На этом рисунке показан общий процесс сериализации.
Объект сериализуется в поток, который переносит не только данные, но и информацию о типе объекта, например его версию, культуру и имя сборки. Из этого потока он может быть сохранен в базе данных, файле или памяти.
Подробности в MSDN.
источник
Вот краткий пример того, как работает сериализация. Я также узнал об этом и нашел две полезные ссылки. Что такое сериализация и как это можно сделать в .NET .
Пример программы, объясняющей сериализацию
Если вы не понимаете вышеуказанную программу гораздо простая программа , с объяснением дается здесь .
источник
Сериализация
Сериализация - это процесс преобразования графа объекта или набора объектов в поток, это массив байтов в случае двоичной сериализации
Использование Сериализации
Ниже приведены некоторые полезные пользовательские атрибуты, которые используются во время сериализации объекта.
[Serializable] -> Используется, когда мы помечаем сериализуемый объект [NonSerialized] -> Используется, когда мы не хотим сериализовать поле объекта. [OnSerializing] -> Используется, когда мы хотим выполнить какое-либо действие при сериализации объекта. [OnSerialized] -> Используется, когда мы хотим выполнить какое-либо действие после сериализации объекта в поток.
Ниже приведен пример сериализации
Вот код вызова
источник