Сериализуемые типы
По умолчанию DataContractSerializer сериализует все открытые типы. Все открытые свойства чтения/записи и поля типа сериализуются.
Изменить предусмотренное по умолчанию поведение можно, применив к типам и членам атрибуты DataContractAttribute и DataMemberAttribute. Этим удобно пользоваться в ситуациях, когда разработчик не имеет возможности управлять типами и изменять их для добавления атрибутов. DataContractSerializer распознает такие "неотмеченные" типы.
Параметры сериализации по умолчанию
Для явного управления сериализацией или настройки сериализации типов и членов можно применять атрибуты DataContractAttribute и DataMemberAttribute. Эти атрибуты также можно применять к закрытым полям. В то же время даже типы, не отмеченные этими атрибутами, сериализуются и десериализуются. Действуют следующие правила и исключения.
DataContractSerializer выводит контракт данных из типов без атрибутов, используя свойства по умолчанию только что созданных типов.
Все открытые поля и свойства с открытыми методами
get
иset
сериализуются, за исключением членов, к которым применен атрибут IgnoreDataMemberAttribute.Семантика сериализации аналогична семантике XmlSerializer.
В неотмеченных типах сериализуются только открытые типы с не имеющими параметров конструкторами. Исключением из этого правила является объект ExtensionDataObject, используемый с интерфейсом IExtensibleDataObject.
Доступные только для чтения поля, свойства без метода
get
илиset
и свойства с внутренними или закрытыми методамиset
илиget
не сериализуются. Такие свойства игнорируются без вызова исключения, кроме случаев с доступными только для возвращения коллекциями.Атрибуты XmlSerializer (такие как
XmlElement
,XmlAttribute
,XmlIgnore
,XmlInclude
и т. д.) игнорируются.Если не применить к типу атрибут DataContractAttribute, все члены в этом типе, к которым применен атрибут DataMemberAttribute, игнорируются сериализатором.
Свойство KnownTypes поддерживается в типах, не отмеченных атрибутом DataContractAttribute. Это подразумевает поддержку атрибута KnownTypeAttribute на неотмеченных типах.
Чтобы исключить из процесса сериализации открытые члены, свойства или поля, применяйте к таким членам атрибут IgnoreDataMemberAttribute.
Наследование
Неотмеченные типы (типы без атрибута DataContractAttribute) могут наследоваться от типов, имеющих этот атрибут. В то же время обратное невозможно: типы с атрибутом от неотмеченных типов наследоваться не могут. Это правило применяется в основном для обеспечения обратной совместимости с кодом, написанным в более ранних версиях платформа .NET Framework.