2010-11-22 2 views
3

Вы можете пометить класс как сериализуемый, используя SerializableAttribute. Тем не менее, вы все равно можете сериализовать объект без маркировки его сериализуемым. Каково влияние этого?Влияние маркировки класса <Serializable()>

+1

Совпадает очень хорошо ... http: //stackoverflow.com/questions/2595104/why-do-you-have-to-mark-a-class-with-the-attribute-serializable – 2010-11-22 22:15:26

ответ

0

Как я понимаю, вы могли бы использовать суррогат для сериализации несериализуемого объекта, но что бы побудило вас сделать это? Я не думаю, что частный член будет сериализован с использованием этого подхода. Вам, вероятно, нужен конструктор по умолчанию и т. Д.

2

Я предполагаю, что когда вы говорите: «Вы все равно можете сериализовать объект без маркировки его сериализуемым», вы имеете в виду, что вы выполняете сериализацию/десериализацию самостоятельно.

Добавление атрибута [Serializable] указывает на сторонний код, который может быть сериализован. Это особенно полезно, если вы хотите сохранить объект в сеансе ASP.NET или в другом инструменте (например, в кеше Memcached).

1

Ввод [Serializable] на типе позволяет использовать его с [System.Runtime.Serialization][1] API, который довольно удобно для наиболее распространенных сценариев и избавить вас от написания много повторяющегося кода для сериализации/десериализации ваших объектов, которые, как правило, громоздкие тест и склонность к ошибкам. И они получают некоторую гибкость в отношении основных механизмов хранения (например, Binary, XML, SOAP ...).

Если вы положили [Serializable] на один из ваших типов, вы должны убедиться, что он будет сериализоваться/десериализоваться должным образом с использованием стандартных механизмов или вам необходимо реализовать ISerializble для управления процессом самостоятельно. Вещи, которые вы должны избегать сериализации, например, свойства обработчика событий.

Прежде всего, при принятии решения о том, следует ли использовать Serializable или нет, вы получаете бесплатную сериализацию полного графа объектов (корневой объект плюс все его ассоциации и их ассоциации), что в противном случае было бы очень сложным, особенно если наследование участвует. Но для этого необходимо, чтобы у вас были все ваши типы на графике с пометкой Serializable.

Смежные вопросы