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 класс для сериализации и десериализации экземпляров типа в 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-конструкций для сохранения ссылочных данных объекта в графе, суррогата для пользовательской сериализации и альтернативы для объявлений сопоставления |
| 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-элемента и пространства имен, содержащего содержимое, и альтернатива для объявлений сопоставления |
| 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-элемент и пространство имен, содержащее содержимое, и альтернатива для объявлений сопоставления |
| 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 |
Возвращает компонент, используемый для динамического сопоставления |
| 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-документ или поток документов и возвращает десериализированный объект. Этот метод содержит параметр, указывающий, проверяется ли имя объекта, и сопоставитель для объявлений сопоставления |
| 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. Этот метод включает в себя сопоставитель для объявлений сопоставления |
| 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.