Подтвердить что ты не робот

Если класс Base отмечен Serializable, все ли дочерние классы тоже отмечены?

У меня есть целый список классов сущностей, которые мне нужно сделать Serializable (из-за хранения состояния сеанса в SQL, но это другая история).

Я добавил атрибут [Serializable], и ​​все кажется прекрасным.

Все мои классы сущностей распространяются от одного и того же базового класса. Если я отмечаю базовый класс как Serializable, означает ли это, что все дети также помечены как Serializable?

Спасибо

4b9b3361

Ответ 1

Нет, атрибут не наследуется.

Когда вы расширяете класс, возможно добавить функции, которые не могут быть сериализуемыми по своей природе, поэтому .NET framework не может предположить для вас, что все, что расширяет сериализуемый базовый класс, также сериализуемо.

Вот почему вы должны явно указывать атрибут [Serializable] для каждого класса отдельно.

Ответ 2

Нет, каждый должен быть отмечен как [Сериализуемый] специально.

Также, если вы собираетесь сериализовать объект в XML, который имеет производный тип, как если бы он был базовым, вам также понадобится атрибут [XmlInclude].

EG:

[Serializable]
public class BaseClass : ParentClass
{
}

[Serializable]
[XmlInclude(typeof(BaseClass))]
public class ParentClass
{
}

(двоичная сериализация, как и то, что используется для сеансов, не нужна)