PHP速学视频免费教程(入门到精通)
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
原文地址:点击打开链接
DataContractSerializer 类
使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档。 无法继承此类。
命名空间: System.Runtime.Serialization
程序集: System.Runtime.Serialization(在 System.Runtime.Serialization.dll 中)
备注
使用 DataContractSerializer 类可以将类型实例序列化和反序列化为 XML 流或文档。 通过将 DataContractAttribute 特性应用于类,而将DataMemberAttribute 特性应用于类成员,可以指定要序列化的属性和字段。
从字面意思来理解就是:数据契约序列化,本文主要是讲解用DataContractSerializer 序列化和反序列化.
DataContractAttribute与DataMenmberAttribute
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace System.Runtime.Serialization { // 摘要: // 指定该类型要定义或实现一个数据协定,并可由序列化程序(如 System.Runtime.Serialization.DataContractSerializer)进行序列化。 // 若要使其类型可序列化,类型作者必须为其类型定义数据协定。 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, Inherited = false, AllowMultiple = false)] public sealed class DataContractAttribute : Attribute { string name; string ns; bool isNameSetExplicitly; bool isNamespaceSetExplicitly; bool isReference; bool isReferenceSetExplicitly; // 摘要: // 初始化 System.Runtime.Serialization.DataContractAttribute 类的新实例。 public DataContractAttribute() { } // 摘要: // 获取或设置一个值,该值指示是否保留对象引用数据。 // // 返回结果: // 如果使用标准 XML 保留对象引用数据,则为 true;否则为 false。 默认值为 false。 public bool IsReference { get { return isReference; } set { isReference = value; isReferenceSetExplicitly = true; } } public bool IsReferenceSetExplicitly { get { return isReferenceSetExplicitly; } } // // 摘要: // 获取或设置类型的数据协定的命名空间。 // // 返回结果: // 协定的命名空间。 public string Namespace { get { return ns; } set { ns = value; isNamespaceSetExplicitly = true; } } public bool IsNamespaceSetExplicitly { get { return isNamespaceSetExplicitly; } } // // 摘要: // 获取或设置类型的数据协定的名称。 // // 返回结果: // 数据协定的本地名称。 默认值是应用了该属性的类的名称。 public string Name { get { return name; } set { name = value; isNameSetExplicitly = true; } } public bool IsNameSetExplicitly { get { return isNameSetExplicitly; } } } }
DataContractAttribute
从应用在DataContractAttribute上的AttributeUsageAttribute特性看,该特性只能用于枚举、类、结构体而不能应用于接口,从关键字sealed知道DataContractAttribute是不可被继承的。AllowMutiple属性为False,表明一个数据类型上只能应用一个DataContractAttribute特性。
从上面对DataContractAttribute定义看出DataContractAttribute仅仅包含5个属性成员,其中Name和Namespace表示数据契约的名称和命名空间,IsReference表示在进行序列化的时候是否保持对象现有的引用结构,该属性默认值为False。
数据契约成员采用显示选择机制,也就是说,应用了DataContractAttribute特性的数据类型的属性/字段不会自动生成契约的数据成员,而只有那些应用了DataMemberAttribute特性的属性/字段才属于数据契约的成员。
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace System.Runtime.Serialization { // 摘要: // 当应用于类型的成员时,指定该成员是数据协定的一部分并可由 System.Runtime.Serialization.DataContractSerializer // 进行序列化。 [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, Inherited = false, AllowMultiple = false)] public sealed class DataMemberAttribute : Attribute { string name; bool isNameSetExplicitly; int order = -1; bool isRequired; bool emitDefaultValue = Globals.DefaultEmitDefaultValue; // 摘要: // 初始化 System.Runtime.Serialization.DataMemberAttribute 类的新实例。 public DataMemberAttribute() { } // // 摘要: // 获取或设置数据成员名称。 // // 返回结果: // 该数据成员的名称。 默认值是应用该属性的目标的名称。 public string Name { get { return name; } set { name = value; isNameSetExplicitly = true; } } public bool IsNameSetExplicitly { get { return isNameSetExplicitly; } } // // 摘要: // 获取或设置成员的序列化和反序列化的顺序。 // // 返回结果: // 序列化或反序列化的数字顺序。 public int Order { get { return order; } set { if (value <p style="font-size: 16px; line-height: 27.2000007629395px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; background-color: rgb(254, 254, 254);">DataMemberAttribute</p><p style="margin-top: 0px; margin-bottom: 0.75em; font-size: 16px; line-height: 27.2000007629395px; text-indent: 1em; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; background-color: rgb(254, 254, 254);"> 从上面应用在DataMemberAttribute上的AttributeUsageAttribute特性来看,该特性只能应用在字段和属性上。因为只有这两种元素才是“数据”成员。4个属性分别表示如下的含义。</p>
name:数据成员的名称,默认为字段或属性的名称。
Order:相应的数据成员在最终序列化的XML中出现的位置,Order值越小越考前,默认值为-1.
IsRequired:表明属性成员是否是必须的成员。默认值为false,表明该成员是可以缺省的。
EmitDefaultValue :获取或设置一个值,该值指定是否对正在被序列化的字段或属性的默认值进行序列化。如果应该在序列化流中生成成员的默认值,则为 true;否则为 false。 默认值为 true。
源代码来源:点击打开链接
以上就是C# WCF DataContractSerializer 类的内容,更多相关内容请关注PHP中文网(www.php.cn)!
已抢7214个
抢已抢94861个
抢已抢14828个
抢已抢52089个
抢已抢194766个
抢已抢87280个
抢