Сериализация и атрибуты

#c# #.net #serialization

#c# #.net #сериализация

Вопрос:

Когда я должен пометить класс как сериализуемый с помощью атрибута [Serializable]? В документации говорится, что класс не должен наследоваться. Однако я использовал этот атрибут в сочетании с атрибутом XmlInclude, чтобы я мог также сериализовать свои производные классы. Разве это неверно?

Я использую классы XmlSerializer и StreamWriter для сериализации своих объектов.

Кроме того, мое понимание подсказывает мне, что любые общедоступные свойства (get и sets) будут сериализованы, другие поля будут проигнорированы. Это тоже правильно?

Будем признательны за любые рекомендации.

Спасибо

Ответ №1:

Когда я должен пометить класс как сериализуемый атрибутом [Serializable]? В документации говорится, что класс не должен наследоваться. Однако я использовал этот атрибут в сочетании с атрибутом XmlInclude, чтобы я мог также сериализовать свои производные классы. Это неверно?

Я использую классы XmlSerializer и StreamWriter для сериализации своих объектов.

Вам никогда не понадобится [Serializable] атрибут для сериализации XML. Он используется только для сериализации с помощью форматеров (например, BinaryFormatter , SoapFormatter )

Кроме того, мое понимание подсказывает мне, что любые общедоступные свойства (get и sets) будут сериализованы, другие поля будут проигнорированы. Это тоже правильно?

Это правильно. Сериализуются только общедоступные свойства чтения / записи, а не поля.

Ответ №2:

XmlSerializer не проверяет этот флаг; ответ таков: «при использовании BinaryFormatter (или нескольких других; не так много) и не реализации ISerializable».

Большинство сериализаторов не используют этот флаг.