序列化之Serialize
简单介绍
序列化,就是转换格式,将一个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相关推荐
- TIA博途_序列化指令Serialize的具体使用方法示例
TIA博途_序列化指令Serialize的具体使用方法示例 序列化指令的基本用途: 首先,我们可以查看TIA博途中的帮助文件说明,如下图所示: 简单总结就是: 把复杂的数据或数据类型(例如UDT.ST ...
- 序列化(Serialize)
将内存中的java对象放到硬盘叫做序列化(会将Java1对象切成一条条的传输)(拆分对象) 硬盘到内存叫做反序列化(组装的对象) 序列化(Serialize)(将java对象的状态保存下来的过程) O ...
- php serialize取值,PHP 序列化(serialize)格式详解
PHP 序列化(serialize)格式详解(转) 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PH ...
- php serialize mysql_php 序列化(serialize)格式详解
1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...
- PHP 序列化(serialize)格式详解
1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对 ...
- ajax提交表单序列化(serialize())数据
知识点: $("#form").serialize();将表单数据序列化为标准URL编码文本字符串(key1=value1&key2=value2-). 以下用一个例子来演 ...
- java序列化机制Serialize接口使用
一.理解 Serializable接口是启用其序列化功能的接口.实现java.io.Serializable 接口的类是可序列化的.没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化. 序列化 ...
- form表单序列化 $('#form1').serialize()到后台没值
今天在做项目的时候,用serialize序列化表单到后台,发现老是失败,结果断点调试看后台的实体的值,结果有的属性有值,有的又没有,搞了好半天发现原来是一个控件的属性是disabled,因为我修改的时 ...
- php serialize参数,PHP 序列化(serialize)格式详解
PHP 序列化(serialize)格式详解 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手 ...
最新文章
- indesign图片规定在左下角_详解InDesign基本使用方法
- Oracle数据库 之 删除RMAN备份
- 为什么做小程序的时候要做定制开发小程序?
- linux下新文件权限设置之umask的理解
- 数据结构之迷宫问题求解(一)利用栈与递归求解出口
- MySQL学习_计算用户支付方式占比_20161104
- elasticsearch2.2之javaApi
- 如何测试Java类的线程安全性
- 使用Hibernate在CQRS读取模型中进行快速开发
- linux删除副本文件,RMAN不能删除控制文件副本解决
- ReactNative简介、开发环境、调试、常用组件、useState状态、FlatList组件、SectionList组件、Platform 模块、定义样式、图片组件、触摸事件、打包apk发布版
- Android系统(45)--Monkey 测试相关知识
- 企业级 布署 vmvare Esxi 5.0.0 从零开始教程 (二) vSphere clinet 安装
- YYKit-YYModel分析
- adams教程建模仿真实例
- python中怎么统计英文字符的个数_python 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数用python代码输入一行字符...
- 10张图带你彻底搞懂限流、熔断、服务降级
- <Java>设计一个名为Fan的类
- 基于AIX VIOS常用命令整理
- stm32f4 CubeMX生成IAR工程 移植ST官方 Bootloader 教程