微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.NET中的序列化

.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文档。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐