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< 元素设置数据协定序列化程序>的类型。

准备序列化或反序列化类

DataContractSerializerDataContractAttributeDataMemberAttribute 类配合使用。 要准备序列化某个类,请将 DataContractAttribute 应用于该类。 对于返回要序列化的数据的类的每个成员,请应用 DataMemberAttribute。 您可以序列化字段和属性,而无论其可访问性级别是什么:private、protected、internal、protected internal 或 public。

例如,您的架构指定Customer类型带有ID属性,但已有一个现有应用程序使用Person类型并具有Name属性。 若要创建符合协定的类型,请先在该类上应用 DataContractAttribute。 然后,将 DataMemberAttribute 应用于要序列化的每个字段或属性。

注释

可以将 DataMemberAttribute 应用于私有成员和公共成员。

XML 的最终格式不是文本。 相反,DataContractSerializer 将数据写入为 XML 信息集,这使你能够将数据写入由 XmlReaderXmlWriter 识别的任何格式。 建议使用 XmlDictionaryReaderXmlDictionaryWriter 类来读取和写入,因为两者都经过优化以使用 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 ,以序列化或反序列化指定类型的对象。 此方法还指定两 XmlDictionaryString 个参数中的根 XML 元素和命名空间,以及可能存在于对象图中的已知类型的列表。

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)

读取带有 XmlDictionaryReader 反序列化对象的 XML 流,并指定是否在读取对象值之前进行检查以验证对象名称。

ReadObject(XmlDictionaryReader)

读取带有 XmlDictionaryReader 反序列化对象的 XML 文档或流。

(继承自 XmlObjectSerializer)
ReadObject(XmlReader, Boolean)

读取带有 XmlReader 反序列化对象的 XML 流,并指定是否在读取对象值之前进行检查以验证对象名称。

ReadObject(XmlReader)

使用 XmlReader 反序列化对象读取 XML 流并返回该对象。

ToString()

返回一个表示当前对象的字符串。

(继承自 Object)
WriteEndObject(XmlDictionaryWriter)

使用 XmlDictionaryWriter. 写入结束 XML 元素。

WriteEndObject(XmlWriter)

使用 XmlWriter. 写入结束 XML 元素。

WriteObject(Stream, Object)

将对象的完整内容(start、content 和 end)写入到具有指定对象的 StreamXML 文档或流中。

(继承自 XmlObjectSerializer)
WriteObject(XmlDictionaryWriter, Object, DataContractResolver)

使用指定的 XmlDictionaryWriter 将所有对象数据(起始 XML 元素、内容和封闭元素)写入 XML 文档或流。 该方法包括用于在运行时进行映射 xsi:type 声明的解析程序。

WriteObject(XmlDictionaryWriter, Object)

将对象的完整内容(start、content 和 end)写入到具有指定对象的 XmlDictionaryWriterXML 文档或流中。

(继承自 XmlObjectSerializer)
WriteObject(XmlWriter, Object)

使用 将所有对象数据(起始 XML 元素、内容和结束元素)写入 XML 文档或流 XmlWriter

WriteObjectContent(XmlDictionaryWriter, Object)

使用 XmlDictionaryWriter.. 写入 XML 内容。

WriteObjectContent(XmlWriter, Object)

使用 XmlWriter.. 写入 XML 内容。

WriteStartObject(XmlDictionaryWriter, Object)

使用 XmlDictionaryWriter. 写入打开的 XML 元素。

WriteStartObject(XmlWriter, Object)

使用 XmlWriter. 写入打开的 XML 元素。

扩展方法

名称 说明
GetSerializationSurrogateProvider(DataContractSerializer)

返回此序列化程序的代理项序列化提供程序。

SetSerializationSurrogateProvider(DataContractSerializer, ISerializationSurrogateProvider)

为此 DataContractSerializer指定代理项序列化提供程序。

适用于

线程安全性

此类的实例是线程安全的,但当实例与 or IDataContractSurrogateDataContractResolver实现一起使用时除外。

另请参阅