加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

.NET中的序列化

发布时间:2020-12-17 02:58:18 所属栏目:安全 来源:网络整理
导读:.NET中的序列化分为三类:二进制,Soap,XML。三个进行序列化/反序列化的类分别是System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,System.Runtime.Serialization.Formatters.Soap.SoapFormatter和System.Xml.Serialization.XmlSerializer
.NET中的序列化分为三类:二进制,Soap,XML。三个进行序列化/反序列化的类分别是System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,System.Runtime.Serialization.Formatters.Soap.SoapFormatter和System.Xml.Serialization.XmlSerializer。? ?? ????????BinaryFormatter用于ASP.NET中的ViewState保存和恢复,以及Remoting中TcpChannel的默认Formatter,SoapFormatter用于Remoting中HttpChannel的默认Formatter,而XmlSerializer用于.NET中的Web?Service。虽然SoapFormatter产生的也是XML格式的字符流,但其中包含了Soap协议所需要的一些数据,因此比XmlSerializer产生的数据量要大,这也是Web?Service比使用HttpChannel+SoapFormatter的Remoting效率要好的原因。? ????????使用SoapFormatter和XmlSerializer序列化时,类需要提供public的无参构造函数,BinaryFormatter则无此需要。 ????????BinnaryFormatter默认序列化类实例的所有字段,而SoapFormatter和XmlSerializer默认只序列化类实例的所有public的字段和属性,并且属性要同时提供get和set方法。? ????????BinaryFormatter可以完整的保存序列化对象的类型信息,包含Assembly,?版本号等。而SoapFormatter的类型相比弱一些,虽然要求限定名一致,但实际上序列化和反序列化后的对象可以有很大不同,比如处于不同的Assembly,私有字段有一些区别等。XmlSerializer则只需要格式兼容,即完全有可能从NamespaceA.ClassA序列化出的Xml反序列化为NamespaceB.ClassB的实例。? ????????支持BinnaryFormatter的类需要添加SerializableAttribute,对于序列化过程的控制,有四种方式:? 为不需要序列化的字段添加NonSerializedAttribute。? 实现接口ISerializable,自定义序列化和反序列化过程。? 实现接口IDeserializationCallback。? 为BinnaryFormatter的实例设置自定义的Binder.? ????????支持SoapFormatter的类,对于序列化过程的控制,有三种方式: 为字段或局性添加相应的SoapXXXAttribute,比如SoapIgnoreAttribute,?SoapElementAttribute,?SoapAttributeAttribute等。? 实现接口IDeserialilzationCallback.? 为BinnaryFormatter的实例设置自定义的Binder.? ????????支持XmlSerializer的类,对于序列化过程的控制,有四种方式: 为字段或局性添加相应的XmlXXXAttribute,比如XmlIgnoreAttribute,?XmlElementAttribute,?XmlAttributeAttribute等。? 实现接口IXmlSerializable(不推荐)。? 实现接口IDeserialilzationCallback。? 创建XmlSerializer时指定XmlTypeMapping或XmlAttributeOverrides。? ????????本文仅给出介绍,有关如何在代码中实现对序列化/反序列化过程的控制,请参考.NET文档。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读