#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».
Большинство сериализаторов не используют этот флаг.