创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较...
序列化本身就是要将对象转换成为数据流, 这样便于存储和传输.
SoapFormatter和binaryFormatter都是一种Formatter,原本我以为XmlSerializer也是继承了IFormatter接口,后来发现不是.
关于formatter和Iformatter,可以到命名空间 System.Runtime.Serialization.Formatters 查看
关于使用比较
// create a file stream to write the file
FileStream fileStream = new FileStream("DoSum.bin", FileMode.Create);
// use the CLR binary formatter
BinaryFormatter binaryFormatter = new BinaryFormatter();
// serialize to disk
binaryFormatter.Serialize(fileStream, sObj);
fileStream.Close();
xmlSerializer 比较不同
// create a file stream to write the file
FileStream fileStream = new FileStream("DoSum.xml", FileMode.Create);
// use the CLR binary formatter
System.Xml.Serialization.XmlSerializer
formatter = new XmlSerializer(typeof(SumOf));
// serialize to disk
formatter.Serialize(fileStream, sObj);
fileStream.Close();
可以使用(定义)不同的格式器来创建对象的序列化.
比如 SoapFormatter, binaryFormatter
当然也可以完全继承一个Formatter来定义自己的格式化器.
SoapFormatter, binaryFormatter 是无法继承的,它们是实现了 IFormatter接口, 而xmlSerializer没有实现接口IFormatter,但我们可以定义类继承于它
序列化导出内容的不同.
如果我们想控制序列化出来的内容,我们有两个途径来控制, 一个是定义自己的格式化器,另一个则是被序列化对象实现接口 System.Runtime.Serialization.ISerializable.
格式化器里面有一个方法:
public override void Serialize(System.IO.Stream serializationStream, object graph)
ISerializable 里面有一个方法:
public void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
需要注意的是, 尽管对象实现了ISerializable, 如果使用xmlSerializer导出内容仍然不变.
注意以下文字
序列化过程的步骤
在格式化程序上调用 serialize 方法时,对象序列化按照以下规则进行:
检查格式化程序是否有代理选取器。如果有,检查代理选取器是否处理指定类型的对象。如果选取器处理此对象类型,将在代理选取器上调用 iserializable.getobjectdata。
如果没有代理选取器或有却不处理此类型,将检查是否使用 serializable 属性对对象进行标记。如果未标记,将会引发 serializationexception。
如果对象已被正确标记,将检查对象是否实现了 iserializable。如果已实现,将在对象上调用 getobjectdata。
如果对象未实现 serializable,将使用默认的序列化策略,对所有未标记为 nonserialized 的字段都进行序列化。
关于对象序列化,可以在网上搜索一下这篇文章<<.NET 中的对象序列化>>
我这里有一个问题, 最近传送一个dataset的时候,我直接使用的 datatset.getxml()获取的序列文件,是否可以自己定义一个formatter来序列它呢?
创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较...相关推荐
- 对象序列化 BinaryFormatter、XmlSerializer、SoapFormatter
序列化:持久化(可能还包括传输)一个对象的状态到流(如文件流和内存流)的过程.用最小花费来保存海量的(各种格式的)数据就变的轻而易举.序列化是用来通信的,服务端把数据序列化,发送到客户端,客户端把接收 ...
- Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象
场景 在Winform程序中需要将某些页面的设置存储到配置文件中,下次再次打开时通过配置文件读取,点击确定时能将将设置保存到配置文件中. 之前介绍过 Winform中自定义xml配置文件后对节点进行读 ...
- C# 派生类的XmlSerializer序列化XML
近段对XML 序列化进行处理,用XmlSerializer这个挺好用的. 但是对于派生类对象的XML的生成总会报错.因为同一个节点名称,不能反射为不同的对象.这个在网上找了好久,都说要利用反射来处理. ...
- android之XmlSerializer序列化XML(写入)
android之XmlSerializer序列化XML(写入)...
android之XmlSerializer序列化XML(写入) 分类:android_数据增删查改2011-03-03 11:497437人阅读评论(2)收藏举报 androidxmlstringen ...
- java之文件与IO流及序列化
目录 文件 java操作文件原理 File类 封装文件为File类对象 常用文件方法 File对象对文件进行操作 File对象对目录进行操作 IO流 IO流的分类 节点流与处理流 处理流特点 字节流与 ...
- java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...
一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...
- python中io.textio_Python文件读写概述(IO操作、文件读写、stringiobytesio、序列化),python,的,小,总结,StringIOBytesIO...
IO操作 在进行文件的读写之前,需要说明几点.首先,运行的程序和读取的数据都会在内存中缓存. 进入到 程序或数据 内存 其次,用python程序进行文件的读写,需要创建一个小工具–文件流,用来处理数据 ...
- IO流--文件切割合并对象的序列化
[阶段一目标:文件的分割]1,切割文件的原理:一个源对应多个目的:切割文件的两种方式.2,碎片文件的命名和编号.3,程序代码体现.4,如何记录源文件的类型以及碎片的个数(建立配置信息文件)(其实也可以 ...
- 23(5) IO文件切割合并-对象的序列化
23(5) IO文件切割合并-对象的序列化 导语: 再接再厉 实现了Serializable接口.详细描述了该接口的作用和序列号的作用 读取配置文件信息的原始方法,也是Properties load方 ...
最新文章
- 在asp.net中调用Office来制作各种(3D)统计图
- GitHub 2021年度报告发布:中国755万开发者排名全球第二!
- 【c语言】蓝桥杯算法提高 c++_ch02_04
- 【数据挖掘知识点六】假设检验
- Java7 ConcurrentHashMap详解
- “去除更多的鲜艳色彩和动态效果的搭配,精简用户使用步长,让软件更像是一件工具。(不排除以后更先进的吸引眼球的方式)“。
- ASP.NET Core 中的规约模式(Specification Pattern )——增强泛型仓储模式
- bzoj 4332:JSOI2012 分零食
- 使用IDEA创建Maven项目和Maven使用入门(配图详解)
- 日志服务数据加工最佳实践: 从其他logstore拉取数据做富化
- 刘卫国python实验答案_MATLAB(刘卫国)部分实验答案
- 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
- 客户端跳转与服务器跳转的区别
- 京东云无线宝AX6600新品发布 预售价799元
- @aspect注解_Spring自定义注解玩法大全,从入门到放弃
- mysql rpm 安装6_CentOS 7.6 MySQL 8.0 RPM包方式安装及新特性介绍
- SpringSecurity Filter顺序
- VUE项目启动:You may use special comments to disable some warnings
- SQL实战之找出所有员工当前薪水salary情况
- 快轮天才发明家刘峰,上榜福布斯2017年亚洲人物
热门文章
- 【Android 安全】DEX 加密 ( 阶段总结 | 主应用 | 代理 Application | Java 工具 | 代码示例 ) ★
- 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )
- 【Android 系统开发】使用 Source InSight 阅读 Android 源码
- 面向对象程序设计案例
- bzoj1513【POI2006】Tet-Tetris 3D
- Python 序列化
- [iOS]关于零基础学习iOS开发的学习方法总结
- 基于新唐M0的XXTEA加密解密算法源码
- 汇编实验:屏幕窗口程序(代码有较为详细的注释)
- 从JVM看类的加载过程与对象实例化过程