简单介绍

序列化,就是转换格式,将一个String,或者一个对象,或者一个List,转换成流的形式,文本流(XML、TXT、Dat……)或者是二进制流,在转换回去就是反序列化。

  • XML和二进制流是最常见的,频繁序列化使用的。
  • 我在项目中使用它的好处:
    -1.在数据库中,假如我序列化一个对象,在表中只占一个字段。
    -2.存储文件到本地的时候,我序列化xml,再次打开程序读取xml即可得到我保存的数据。
    -3.一些信息的录入,例如软件的使用有一些格式需要用户来填写,只需要告诉他特定的格式写入数据即可。

方法

1.对象与字节数组

1.对象序列化为字节数组

简述

这就是转换为二进制流。

条件

(1)对象所属类加上标志[Serializable],在属性前加入标志 [XmlAttribute](加一个即可)
如图:

(2)需要有一个常规的构造

Code

static byte[] ObjectSerializerByte<T>(T obj)
{var stream = new MemoryStream();var binaryFormatter = new BinaryFormatter();binaryFormatter.Serialize(stream, obj);return stream.GetBuffer();
}

2.对象序列化为字节数组

第二种方法

byte[] CatalogSerializerBinaryToStream<T>(T obj)
{Stream stream = new MemoryStream();BinaryFormatter binaryFormatter = new BinaryFormatter();binaryFormatter.Serialize(stream, obj);BinaryReader binary = new BinaryReader(stream);binary.BaseStream.Seek(0, SeekOrigin.Begin);byte[] fileBytes = new byte[stream.Length];fileBytes = binary.ReadBytes((int)binary.BaseStream.Length);stream.Close();return fileBytes;
}

3.字节数组反序列化为对象

public static T ByteDeserializerCatalog<T>(byte[] binaryBytes)
{var bfBinaryFormatter = new BinaryFormatter();return (T)bfBinaryFormatter.Deserialize(new MemoryStream(binaryBytes));
}

2.对象与XML、Txt等文本格式

1.对象序列化为XML……存入到本地

我这个方法封装的,第4个参数很少用过,如果是null,新建文本,如果是apend,在传入路径打开的文本中添加内容,续写

/// <summary>
/// 对象序列化为XML、Txt等文本格式
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="localPath">本地路径</param>
/// <param name="fileType">文件类型(xml\txt)</param>
/// <param name="fileModel">打开文件的方式(null直接create||append本地若存在在文件尾添加)</param>
/// 在append中可以延伸更改编码方式
void CatalogSerializerXmlToLocal<T>(T obj, string localPath, string fileType, string fileModel)
{XmlSerializer serializer = new XmlSerializer(typeof(T));TextWriter writer = null;switch (fileModel){case null: { writer = new StreamWriter(localPath + "." + fileType); break; }case "append":{FileStream stream = new FileStream(localPath + "." + fileType, FileMode.Append);writer = new StreamWriter(stream);break;}}if (null != writer ){serializer.Serialize(writer, obj);writer.Close();}
}

2.本地文件反序列化为对象

T XmlDeserializerCatalog<T>(T obj, string localPath)
{XmlSerializer serializer = new XmlSerializer(obj.GetType());FileStream stream = new FileStream(localPath, FileMode.Open);obj = (T)serializer.Deserialize(stream);stream.Close();return obj;
}

3.字节数组与XML

private XmlDocument RootDataBaseInStreamDeserializationBecomeXml(byte[] strBytes)
{XmlSerializer ser = new XmlSerializer(typeof(XmlDocument));MemoryStream memory = new MemoryStream(strBytes);XmlDocument xmlDocument = (XmlDocument)ser.Deserialize(memory);return xmlDocument;
}

4.字节数组与List< T >

1.List< T >序列化为字节数组

byte[] ListaySerializeByte<T>(List<T> obj)
{var bf = new BinaryFormatter();var ms = new MemoryStream();bf.Serialize(ms, PipeRangeGeometrys);return ms.ToArray();
}

2.字节数组反序列化为List< T >

object BytesDeserializeObject(byte[] arrBytes)
{var memStream = new MemoryStream();var binForm = new BinaryFormatter();memStream.Write(arrBytes, 0, arrBytes.Length);memStream.Seek(0, SeekOrigin.Begin);var obj = (Object)binForm.Deserialize(memStream);return obj;
}

return的强转为List< T >即可

5.List< T >与XML

List< T >与XML,附带String,将List< T >序列化为XML,然后转为String……,在转回List< T >

1.List< T >序列化为XML转为String

  var ser = new XmlSerializer(typeof(List< T >));var sb = new StringBuilder();var sw = new StringWriter(sb);ser.Serialize(sw, entList);//entList是要转换的string entListToString = sb.ToString();

2.XML转的String反序列化为List< T >

    var sr = new StringReader(str);//str是要转换的var ser = new XmlSerializer(typeof(List<string>));List<string> list = (List<string>) ser.Deserialize(sr);

结尾

一些是从项目中摘取,一些是没有用到但自己没事总结,但都是亲测过的,部分方法名字起的不够恰当~~

序列化之Serialize相关推荐

  1. TIA博途_序列化指令Serialize的具体使用方法示例

    TIA博途_序列化指令Serialize的具体使用方法示例 序列化指令的基本用途: 首先,我们可以查看TIA博途中的帮助文件说明,如下图所示: 简单总结就是: 把复杂的数据或数据类型(例如UDT.ST ...

  2. 序列化(Serialize)

    将内存中的java对象放到硬盘叫做序列化(会将Java1对象切成一条条的传输)(拆分对象) 硬盘到内存叫做反序列化(组装的对象) 序列化(Serialize)(将java对象的状态保存下来的过程) O ...

  3. php serialize取值,PHP 序列化(serialize)格式详解

    PHP 序列化(serialize)格式详解(转) 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PH ...

  4. php serialize mysql_php 序列化(serialize)格式详解

    1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...

  5. PHP 序列化(serialize)格式详解

      1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对 ...

  6. ajax提交表单序列化(serialize())数据

    知识点: $("#form").serialize();将表单数据序列化为标准URL编码文本字符串(key1=value1&key2=value2-). 以下用一个例子来演 ...

  7. java序列化机制Serialize接口使用

    一.理解 Serializable接口是启用其序列化功能的接口.实现java.io.Serializable 接口的类是可序列化的.没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化. 序列化 ...

  8. form表单序列化 $('#form1').serialize()到后台没值

    今天在做项目的时候,用serialize序列化表单到后台,发现老是失败,结果断点调试看后台的实体的值,结果有的属性有值,有的又没有,搞了好半天发现原来是一个控件的属性是disabled,因为我修改的时 ...

  9. php serialize参数,PHP 序列化(serialize)格式详解

    PHP 序列化(serialize)格式详解 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手 ...

最新文章

  1. indesign图片规定在左下角_详解InDesign基本使用方法
  2. Oracle数据库 之 删除RMAN备份
  3. 为什么做小程序的时候要做定制开发小程序?
  4. linux下新文件权限设置之umask的理解
  5. 数据结构之迷宫问题求解(一)利用栈与递归求解出口
  6. MySQL学习_计算用户支付方式占比_20161104
  7. elasticsearch2.2之javaApi
  8. 如何测试Java类的线程安全性
  9. 使用Hibernate在CQRS读取模型中进行快速开发
  10. linux删除副本文件,RMAN不能删除控制文件副本解决
  11. ReactNative简介、开发环境、调试、常用组件、useState状态、FlatList组件、SectionList组件、Platform 模块、定义样式、图片组件、触摸事件、打包apk发布版
  12. Android系统(45)--Monkey 测试相关知识
  13. 企业级 布署 vmvare Esxi 5.0.0 从零开始教程 (二) vSphere clinet 安装
  14. YYKit-YYModel分析
  15. adams教程建模仿真实例
  16. python中怎么统计英文字符的个数_python 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数用python代码输入一行字符...
  17. 10张图带你彻底搞懂限流、熔断、服务降级
  18. <Java>设计一个名为Fan的类
  19. 基于AIX VIOS常用命令整理
  20. stm32f4 CubeMX生成IAR工程 移植ST官方 Bootloader 教程

热门文章

  1. oracle AWR 报告 中文版
  2. 计算机基础知识(基础入门小白专属)十
  3. EOS 一周回顾(11.25-12.1)
  4. 正则匹配---匹配包含指定字符串
  5. vue+elementUI完成登陆+注册
  6. USB键盘背后的那些事儿
  7. 电话机器人是如何筛选意向客户的
  8. Fiddler抓包配置和使用(全网最详细教程)
  9. vba访问服务器中txt文件,vba读取word内容 vba读取txt文件
  10. SQL Server Management Studio