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