В чем разница между использованием атрибута Serializable и реализацией ISerializable?
в чем разница между использованием Serializable атрибут и реализация ISerializable интерфейс?
5 ответов:
при использовании
SerializableAttributeатрибут вы помещаете атрибут в поле во время компиляции таким образом, что во время выполнения средства сериализации будут знать, что сериализовать на основе атрибутов, выполнив отражение типа class/module/assembly.[Serializable] public class MyFoo { … }выше указано, что средство сериализации должно сериализовать весь класс
MyFoo, тогда как:public class MyFoo { private int bar; [Serializable] public int WhatBar { get { return this.bar; } } }используя атрибут вы можете выборочно выберите, какие поля должны быть сериализованы.
при использовании
ISerializableинтерфейс, сериализация эффективно переопределяется пользовательской версией, переопределяяGetObjectDataи(и предоставив конструктор формыSetObjectDataMyFoo(SerializationInfo info, StreamingContext context)), была бы более тонкая степень контроля над сериализацией данных.см. также этот пример пользовательской сериализации здесь StackOverflow. Он показывает, как поддерживать обратную совместимость сериализации с различными версиями сериализованных данных.
надеюсь, что это помогает.
The SerializableAttribute указывает платформе выполнить процесс сериализации по умолчанию. Если вам нужно больше контроля, вы можете использовать тег интерфейс ISerializable интерфейс. Затем вы поместили бы свой собственный код для сериализации объекта в
GetObjectDataметод и обновитьSerializationInfoобъект, который передается в его.
The
ISerializableинтерфейс позволяет реализовать пользовательские сериализации другое, чем по умолчанию. Когда вы реализуетеISerializableинтерфейс, вы должны переопределитьGetObjectDataметод следующим образомpublic void GetObjectData (SerializationInfo serInfo, StreamingContext streamContext) { // Implement custom Serialization }