序列化本身就是要将对象转换成为数据流, 这样便于存储和传输.

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序列化文件的比较...相关推荐

  1. 对象序列化 BinaryFormatter、XmlSerializer、SoapFormatter

    序列化:持久化(可能还包括传输)一个对象的状态到流(如文件流和内存流)的过程.用最小花费来保存海量的(各种格式的)数据就变的轻而易举.序列化是用来通信的,服务端把数据序列化,发送到客户端,客户端把接收 ...

  2. Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象

    场景 在Winform程序中需要将某些页面的设置存储到配置文件中,下次再次打开时通过配置文件读取,点击确定时能将将设置保存到配置文件中. 之前介绍过 Winform中自定义xml配置文件后对节点进行读 ...

  3. C# 派生类的XmlSerializer序列化XML

    近段对XML 序列化进行处理,用XmlSerializer这个挺好用的. 但是对于派生类对象的XML的生成总会报错.因为同一个节点名称,不能反射为不同的对象.这个在网上找了好久,都说要利用反射来处理. ...

  4. android之XmlSerializer序列化XML(写入) android之XmlSerializer序列化XML(写入)...

    android之XmlSerializer序列化XML(写入) 分类:android_数据增删查改2011-03-03 11:497437人阅读评论(2)收藏举报 androidxmlstringen ...

  5. java之文件与IO流及序列化

    目录 文件 java操作文件原理 File类 封装文件为File类对象 常用文件方法 File对象对文件进行操作 File对象对目录进行操作 IO流 IO流的分类 节点流与处理流 处理流特点 字节流与 ...

  6. java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...

    一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...

  7. python中io.textio_Python文件读写概述(IO操作、文件读写、stringiobytesio、序列化),python,的,小,总结,StringIOBytesIO...

    IO操作 在进行文件的读写之前,需要说明几点.首先,运行的程序和读取的数据都会在内存中缓存. 进入到 程序或数据 内存 其次,用python程序进行文件的读写,需要创建一个小工具–文件流,用来处理数据 ...

  8. IO流--文件切割合并对象的序列化

    [阶段一目标:文件的分割]1,切割文件的原理:一个源对应多个目的:切割文件的两种方式.2,碎片文件的命名和编号.3,程序代码体现.4,如何记录源文件的类型以及碎片的个数(建立配置信息文件)(其实也可以 ...

  9. 23(5) IO文件切割合并-对象的序列化

    23(5) IO文件切割合并-对象的序列化 导语: 再接再厉 实现了Serializable接口.详细描述了该接口的作用和序列号的作用 读取配置文件信息的原始方法,也是Properties load方 ...

最新文章

  1. 在asp.net中调用Office来制作各种(3D)统计图
  2. GitHub 2021年度报告发布:中国755万开发者排名全球第二!
  3. 【c语言】蓝桥杯算法提高 c++_ch02_04
  4. 【数据挖掘知识点六】假设检验
  5. Java7 ConcurrentHashMap详解
  6. “去除更多的鲜艳色彩和动态效果的搭配,精简用户使用步长,让软件更像是一件工具。(不排除以后更先进的吸引眼球的方式)“。
  7. ASP.NET Core 中的规约模式(Specification Pattern )——增强泛型仓储模式
  8. bzoj 4332:JSOI2012 分零食
  9. 使用IDEA创建Maven项目和Maven使用入门(配图详解)
  10. 日志服务数据加工最佳实践: 从其他logstore拉取数据做富化
  11. 刘卫国python实验答案_MATLAB(刘卫国)部分实验答案
  12. 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
  13. 客户端跳转与服务器跳转的区别
  14. 京东云无线宝AX6600新品发布 预售价799元
  15. @aspect注解_Spring自定义注解玩法大全,从入门到放弃
  16. mysql rpm 安装6_CentOS 7.6 MySQL 8.0 RPM包方式安装及新特性介绍
  17. SpringSecurity Filter顺序
  18. VUE项目启动:You may use special comments to disable some warnings
  19. SQL实战之找出所有员工当前薪水salary情况
  20. 快轮天才发明家刘峰,上榜福布斯2017年亚洲人物

热门文章

  1. 【Android 安全】DEX 加密 ( 阶段总结 | 主应用 | 代理 Application | Java 工具 | 代码示例 ) ★
  2. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )
  3. 【Android 系统开发】使用 Source InSight 阅读 Android 源码
  4. 面向对象程序设计案例
  5. bzoj1513【POI2006】Tet-Tetris 3D
  6. Python 序列化
  7. [iOS]关于零基础学习iOS开发的学习方法总结
  8. 基于新唐M0的XXTEA加密解密算法源码
  9. 汇编实验:屏幕窗口程序(代码有较为详细的注释)
  10. 从JVM看类的加载过程与对象实例化过程