DataContractSerializer Класс

Определение

Сериализует и десериализирует экземпляр типа в XML-поток или документ с помощью предоставленного контракта данных. Этот класс не наследуется.

public ref class DataContractSerializer sealed : System::Runtime::Serialization::XmlObjectSerializer
public sealed class DataContractSerializer : System.Runtime.Serialization.XmlObjectSerializer
type DataContractSerializer = class
    inherit XmlObjectSerializer
Public NotInheritable Class DataContractSerializer
Inherits XmlObjectSerializer
Наследование
DataContractSerializer

Комментарии

Используйте DataContractSerializer класс для сериализации и десериализации экземпляров типа в XML-поток или документ. Например, вы можете создать тип с именем Person и свойствами, содержащими важные данные, такие как имя и адрес. Затем можно создать и управлять экземпляром Person класса и записать все его значения свойств в XML-документе для последующего получения или в XML-потоке для немедленного транспорта. Наиболее важно то, что DataContractSerializer используется для сериализации и десериализации данных, отправленных в сообщениях Windows Communication Foundation (WCF). Примените DataContractAttribute атрибут к классам и DataMemberAttribute атрибут к членам класса, чтобы указать свойства и поля, сериализованные.

Список типов, которые можно сериализовать, см. в разделе "Типы", поддерживаемые сериализатором контракта данных.

Для использования DataContractSerializerсначала создайте экземпляр класса и объект, соответствующий написанию или чтению формата, например экземпляра XmlDictionaryWriter. Затем вызовите WriteObject метод для сохранения данных. Чтобы получить данные, создайте объект, соответствующий формату данных (например XmlDictionaryReader , xml-документу) и вызовите ReadObject метод.

Дополнительные сведения об использовании DataContractSerializerсериализации и десериализации см. в разделе "Сериализация" и "Десериализация".

Тип сериализатора контракта данных можно задать с помощью <элемента dataContractSerializer> в файле конфигурации клиентского приложения.

Подготовка классов для сериализации или десериализации

DataContractSerializer используется в сочетании с классами DataContractAttribute и DataMemberAttribute. Чтобы подготовить класс к сериализации, примените атрибут DataContractAttribute к классу. Для каждого члена класса, возвращающего данные, которые необходимо сериализовать, примените DataMemberAttribute. Можно сериализовать поля и свойства независимо от уровня доступа: частные, защищенные, внутренние, защищенные внутренние или публичные.

Например, ваша схема определяет Customer с свойством ID, но у вас уже есть существующее приложение, использующее тип с именем Person и свойством Name. Чтобы создать тип, соответствующий контракту, сначала примените DataContractAttribute к классу. Затем примените метку DataMemberAttribute к каждому полю или свойству, которое необходимо сериализовать.

Замечание

Вы можете применять DataMemberAttribute как к частным, так и к общедоступным членам.

Окончательный формат XML не должен быть текстом. Вместо этого DataContractSerializer записывает данные в формате XML-набора сведений, что позволяет записывать данные в любой формат, распознаваемый XmlReader и XmlWriter. Рекомендуется использовать классы XmlDictionaryReader и XmlDictionaryWriter для чтения и записи, поскольку оба оптимизированы для работы с DataContractSerializer.

Если вы создаете класс с полями или свойствами, которые должны быть заполнены перед сериализацией или десериализацией, используйте атрибуты обратного вызова, как описано в Version-Tolerant Сериализация обратных вызовов.

Добавление в коллекцию известных типов

При сериализации или десериализации объекта необходимо, чтобы тип был "известен" для объекта DataContractSerializer. Начните с создания экземпляра класса, реализующего IEnumerable<T> (например List<T>) и добавив известные типы в коллекцию. Затем создайте экземпляр DataContractSerializer, используя одну из перегрузок, которая принимает IEnumerable<T> (например, DataContractSerializer(Type, IEnumerable<Type>)).

Замечание

В отличие от других примитивных типов, DateTimeOffset структура не является известным типом по умолчанию, поэтому она должна быть вручную добавлена в список известных типов (см. раздел "Известные типы контракта данных").

Совместимость с будущими версиями

DataContractSerializer понимает контракты данных, которые были разработаны для совместимости с будущими версиями контракта. Такие типы реализуют IExtensibleDataObject интерфейс. Интерфейс содержит ExtensionData свойство, возвращающее ExtensionDataObject объект. Дополнительные сведения см. в Forward-Compatible договорах о данных.

Конструкторы

Имя Описание
DataContractSerializer(Type, DataContractSerializerSettings)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа и параметров.

DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также указывает список известных типов, которые могут присутствовать в графе объектов, максимальное количество элементов графа для сериализации, параметры для пропуска непредвиденных данных, использование нестандартных XML-конструкций для сохранения ссылочных данных объекта в графе, суррогата для пользовательской сериализации и альтернативы для объявлений сопоставления xsi:type во время выполнения.

DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также указывает список известных типов, которые могут присутствовать в графе объектов, максимальное количество элементов графа для сериализации, параметры для пропуска непредвиденных данных, использование нестандартных XML-конструкций для сохранения эталонных данных объекта в графе и суррогат для пользовательской сериализации.

DataContractSerializer(Type, IEnumerable<Type>)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа, а также коллекции известных типов, которые могут присутствовать в графе объектов.

DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также указывает список известных типов, которые могут присутствовать в графе объектов, максимальное количество элементов графа для сериализации, параметров, которые игнорируют непредвиденные данные, независимо от того, следует ли использовать нестандартные xml-конструкции для сохранения ссылочных данных объекта в графе, суррогата для пользовательской сериализации, XML-элемента и пространства имен, содержащего содержимое, и альтернатива для объявлений сопоставления xsi:type во время выполнения.

DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также задает список известных типов, которые могут присутствовать в графе объектов, максимальное количество элементов графа для сериализации, параметры для пропуска непредвиденных данных, использование нестандартных xml-конструкций для сохранения ссылочных данных объекта в графе, суррогата для пользовательской сериализации, а также элемента XML и пространства имен, содержащего содержимое.

DataContractSerializer(Type, String, String, IEnumerable<Type>)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также задает корневой XML-элемент и пространство имен в двух строковых параметрах, а также список известных типов, которые могут присутствовать в графе объектов.

DataContractSerializer(Type, String, String)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа с помощью предоставленного корневого элемента XML и пространства имен.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также указывает список известных типов, которые могут присутствовать в графе объектов, максимальное количество элементов графа для сериализации, параметры для пропуска непредвиденных данных, использование нестандартных XML-конструкций для сохранения ссылочных данных объекта в графе, суррогатной для пользовательской сериализации, параметров XmlDictionaryString , определяющих XML-элемент и пространство имен, содержащее содержимое, и альтернатива для объявлений сопоставления xsi:type во время выполнения.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также указывает список известных типов, которые могут присутствовать в графе объектов, максимальное количество элементов графа для сериализации, параметры для пропуска непредвиденных данных, использование нестандартных xml-конструкций для сохранения ссылочных данных объекта в графе, суррогата для пользовательской сериализации и параметров XmlDictionaryString , определяющих XML-элемент и пространство имен, содержащее содержимое.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа. Этот метод также указывает корневой XML-элемент и пространство имен в двух XmlDictionaryString параметрах, а также список известных типов, которые могут присутствовать в графе объектов.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа с помощью корневого элемента XML и пространства имен, указанного с помощью параметров типа XmlDictionaryString.

DataContractSerializer(Type)

Инициализирует новый экземпляр DataContractSerializer класса для сериализации или десериализации объекта указанного типа.

Свойства

Имя Описание
DataContractResolver

Возвращает компонент, используемый для динамического сопоставления xsi:type объявлений с известными типами контрактов.

DataContractSurrogate

Получает суррогатный тип, который может расширить процесс сериализации или десериализации.

IgnoreExtensionDataObject

Возвращает значение, указывающее, следует ли игнорировать данные, предоставленные расширением класса при сериализации или десериализации класса.

KnownTypes

Возвращает коллекцию типов, которые могут присутствовать в графе объектов, сериализованном с помощью этого экземпляра DataContractSerializerобъекта.

MaxItemsInObjectGraph

Возвращает максимальное количество элементов в графе объектов для сериализации или десериализации.

PreserveObjectReferences

Возвращает значение, указывающее, следует ли использовать нестандартные конструкции XML для сохранения эталонных данных объекта.

SerializeReadOnlyTypes

Возвращает значение, указывающее, сериализуются ли типы только для чтения.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
IsStartObject(XmlDictionaryReader)

Определяет, размещается ли объект XmlDictionaryReader на объекте, который можно десериализировать.

IsStartObject(XmlReader)

Определяет, размещается ли объект XmlReader на объекте, который можно десериализировать.

MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ReadObject(Stream)

Считывает XML-поток или документ с помощью десериализированного Stream объекта и возвращает десериализированный объект.

(Унаследовано от XmlObjectSerializer)
ReadObject(XmlDictionaryReader, Boolean, DataContractResolver)

Считывает XML-документ или поток документов и возвращает десериализированный объект. Этот метод содержит параметр, указывающий, проверяется ли имя объекта, и сопоставитель для объявлений сопоставления xsi:type во время выполнения.

ReadObject(XmlDictionaryReader, Boolean)

Считывает XML-поток с XmlDictionaryReader десериализированным объектом и возвращает десериализированный объект, а также указывает, выполняется ли проверка имени объекта перед чтением его значения.

ReadObject(XmlDictionaryReader)

Считывает XML-документ или поток с десериализированным XmlDictionaryReader объектом.

(Унаследовано от XmlObjectSerializer)
ReadObject(XmlReader, Boolean)

Считывает XML-поток с XmlReader десериализированным объектом и возвращает десериализированный объект, а также указывает, выполняется ли проверка имени объекта перед чтением его значения.

ReadObject(XmlReader)

Считывает XML-поток с десериализированным XmlReader объектом и возвращает десериализированный объект.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
WriteEndObject(XmlDictionaryWriter)

Записывает закрывающий XML-элемент с помощью элемента XmlDictionaryWriter.

WriteEndObject(XmlWriter)

Записывает закрывающий XML-элемент с помощью элемента XmlWriter.

WriteObject(Stream, Object)

Записывает полное содержимое (начало, содержимое и конец) объекта в XML-документ или поток с указанным Stream.

(Унаследовано от XmlObjectSerializer)
WriteObject(XmlDictionaryWriter, Object, DataContractResolver)

Записывает все данные объекта (начальный XML-элемент, содержимое и вложенный элемент) в XML-документ или поток с помощью указанного XmlDictionaryWriter. Этот метод включает в себя сопоставитель для объявлений сопоставления xsi:type во время выполнения.

WriteObject(XmlDictionaryWriter, Object)

Записывает полное содержимое (начало, содержимое и конец) объекта в XML-документ или поток с указанным XmlDictionaryWriter.

(Унаследовано от XmlObjectSerializer)
WriteObject(XmlWriter, Object)

Записывает все данные объекта (начиная с XML-элемента, содержимого и закрывающего элемента) в XML-документ или поток с помощью XmlWriterобъекта.

WriteObjectContent(XmlDictionaryWriter, Object)

Записывает XML-содержимое с помощью .XmlDictionaryWriter

WriteObjectContent(XmlWriter, Object)

Записывает XML-содержимое с помощью .XmlWriter

WriteStartObject(XmlDictionaryWriter, Object)

Записывает открывающий XML-элемент с помощью элемента XmlDictionaryWriter.

WriteStartObject(XmlWriter, Object)

Записывает открывающий XML-элемент с помощью элемента XmlWriter.

Методы расширения

Имя Описание
GetSerializationSurrogateProvider(DataContractSerializer)

Возвращает суррогатный поставщик сериализации для этого сериализатора.

SetSerializationSurrogateProvider(DataContractSerializer, ISerializationSurrogateProvider)

Указывает для этого DataContractSerializerсуррогатный поставщик сериализации.

Применяется к

Потокобезопасность

Экземпляры этого класса являются потокобезопасными, за исключением случаев, когда экземпляр используется с реализацией IDataContractSurrogate или DataContractResolver.

См. также раздел