.net 序列化 与反序列化 Serializable
序列化:序列化指的是 将对象 通过流的方式 保存为一个文件。 反序列化则是将该文件还原成 对象的过程。
序列化的作用:序列化可以跨语言跨平台 传输数据,将某一对象序列化成通用的文件格式在进行传输。 比如XML 等。
C# 中的序列化方法有一下4种:
1.BinaryFormatter
2.SoapFormatter(.net 3.5 开始便废弃它了,不要在生产代码中使用它)
3.XmlSerializer
4.Json
首先查看 BinaryFormatter 序列化 反序列化
//Serializable 标示可序列化
[Serializable]
public class Cars
{
public ArrayList carBrandList; //品牌数组
public Cars()
{
carBrandList = new ArrayList();
}
public string CarName;
[NonSerialized] //标示不可序列化
public string carNumber; public string CarID
{ get; set; } private string _carPrice;
public void SetCarPrice(string price)
{
_carPrice = price;
}
}
static void Main(string[] args)
{
//实例化对象
Cars cars = new Cars();
cars.CarID = "";
cars.carBrandList.Add("宝马");
cars.carBrandList.Add("路虎");
cars.carBrandList.Add("布加迪");
cars.CarName = "路虎-揽胜极光";
cars.carNumber = "闽A-0888A";
cars.SetCarPrice("590000.00"); //BinaryFormatter 序列化
string strFile = "c:\\cars.txt";
using (FileStream fs = new FileStream(strFile, FileMode.Create))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, cars);
}
Cars car = DeSerialize(); //
}
//反序列化
public Cars DeSerialize()
{
string strFile = "c:\\cars.txt";
Cars cars;
using (FileStream fs = new FileStream(strFile, FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
cars = (Cars)formatter.Deserialize(fs);
}
return cars;
}
接下来查看下 反序列化回来的对象属性
SoapFormatter序列化反序列化
//Serializable 标示可序列化
[Serializable]
public class Cars
{
public ArrayList carBrandList; //品牌数组 public Cars()
{
carBrandList = new ArrayList();
} public string CarName; [NonSerialized] //标示不可序列化
public string carNumber; public string CarID
{ get; set; } private string _carPrice; public void SetCarPrice(string price)
{
_carPrice = price;
} }
static void Main(string[] args)
{
//SoapFormatter 序列化
string strSoapFile = "c:\\cars.Soap";
using (FileStream fs = new FileStream(strSoapFile, FileMode.Create))
{
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(fs, cars);
}
Cars scar = DeSoapSerialize();
} //反序列化
public Cars DeSoapSerialize()
{
string strFile = "c:\\cars.Soap";
Cars cars;
using (FileStream fs = new FileStream(strFile, FileMode.Open))
{
SoapFormatter formatter = new SoapFormatter();
cars = (Cars)formatter.Deserialize(fs);
}
return cars;
}
XmlSerializer 序列化 反序列化
//Serializable 标示可序列化
[Serializable]
public class Cars
{
public ArrayList carBrandList; //品牌数组 public Cars()
{
carBrandList = new ArrayList();
} public string CarName; [NonSerialized] //标示不可序列化
public string carNumber; public string CarID
{ get; set; } private string _carPrice; public void SetCarPrice(string price)
{
_carPrice = price;
} }
static void Main(string[] args)
{ //实例化对象
Cars cars = new Cars();
cars.CarID = "";
cars.carBrandList.Add("宝马");
cars.carBrandList.Add("路虎");
cars.carBrandList.Add("布加迪");
cars.CarName = "路虎-揽胜极光";
cars.carNumber = "闽A-0888A";
cars.SetCarPrice("590000.00"); //XmlSerializer 序列化
string strXMLFile = "c:\\cars.XML";
using (FileStream fs = new FileStream(strXMLFile, FileMode.Create))
{
XmlSerializer serializer = new XmlSerializer(typeof(Cars));
serializer.Serialize(fs, cars);
}
Cars xcar = DeXMLSerialize();
} public Cars DeXMLSerialize()
{
string strFile = "c:\\cars.XML";
Cars cars;
using (FileStream fs = new FileStream(strFile, FileMode.Open))
{
XmlSerializer formatter = new XmlSerializer(typeof(Cars));
cars = (Cars)formatter.Deserialize(fs);
}
return cars;
}
都执行完成后 大家可以查看下生产的 的 文件,查看下反序列化出来的结果 可以发现
1.单有[NonSerialized] 表示的时候 BinaryFormatter 与 Soap 是无法序列化对象属性。
2.private 私有属性 XML方式是无法序列化的。
3.XML可序列化[NonSerialized]标示的 属性。
.net 序列化 与反序列化 Serializable的更多相关文章
- Java序列化与反序列化(Serializable)
Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...
- 序列化与反序列化总结(Serializable和Parcelable)
序列化是指将对象的状态信息转换为可以存储或传输的形式的过程. 在Java中创建的对象,只要没有被回收就可以被复用,但是,创建的这些对象都是存在于JVM的堆内存中,JVM处于运行状态时候,这些对象可以复 ...
- 序列化、反序列化(Serializable特性)
//需要被实例化的类 using System.Collections; using UnityEngine; [Serializable] public class SerializableClas ...
- 使用Serializable接口进行JAVA的序列化和反序列化
OBJECT STREAMS – SERIALIZATION AND DESERIALIZATION IN JAVA EXAMPLE USING SERIALIZABLE INTERFACE Hite ...
- Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,seria ...
- Serializable 接口与 Java 序列化与反序列化
0. 序列化的意义 从内存到本地即为本地化或者在网络中进行传输,或叫序列化,持久化. 某 Java 类实现 Serializable 接口的目的是为了可持久化(简单理解为本地化),比如网络传输或本地存 ...
- [转]Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
原文地址:https://blog.csdn.net/qq_27093465/article/details/78544505 遇到这个 Java Serializable 序列化这个接口,我们可能会 ...
- Java 对象序列化和反序列化 (实现 Serializable 接口)
序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放 ...
- 71 Serializable(序列化和反序列化)
对象的输出流:ObjectOutputStream 把对象输出到文件存储起来,我们称作为序列化对象的输入流:ObjectInputStream 把对象从文件中读取出来,我们称作为反序列化 Obj ...
随机推荐
- 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能
之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度.最近发现很多人问怎么用FFmpeg采集摄像头图像,事实 ...
- 复制书稿(book) (二分,贪心+dp)
复制书稿(book) 时间限制: 1 Sec 内存限制: 128 MB提交: 3 解决: 1[提交][状态][讨论版][命题人:quanxing] 题目描述 现在要把m本有顺序的书分给k个人复制( ...
- Excel开发学习笔记:文件选择控件、查找匹配项、单元格格式及数据有效性
一个自用的基于excel的小工具. , ), .Cells(, )) sysKpiRow.Interior.ColorIndex = ).value = , ) ...
- Linux学习笔记 -- 初识 Shell
Shell 是什么 Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务.Shell既是 ...
- StarkSoft题库管理系统
一.功能介绍 1.自定义试题库管理系统目录.难易程度,题型,知识库等. 2.试题录入. 3.强大的试题编辑功能,并与通常应用编辑工具有共通. 4.灵活的试卷构造功能,用户可自定 ...
- js中的requestAnimationFrame
js中的requestAnimationFrame requestAnimationFrame的作用就是重绘 一个简单的demo如下 <!DOCTYPE html> <html la ...
- springboot成神之——mybatis在spring-boot中使用的几种方式
本文介绍mybatis在spring-boot中使用的几种方式 项目结构 依赖 WebConfig DemoApplication 方式一--@Select User DemoApplication ...
- GY89的使用
GY89集成了三块不同的芯片,分别为:BMP180.L3GD20和LSM303DLH,作用分别是获取温度压强.三轴陀螺仪和加速度计的数据.以下通过把各个模块的数据输出到终端来测试GY89的功能. #i ...
- 手机自带输入法emoji表情的输入,提交及显示——前端解决方案
体验更优排版请移步原文:http://blog.kwin.wang/programming/emoji-transform-commit.html 之前就遇到过需要前端支持用户输入并提交emoji表情 ...
- js中slice,splice和split方法的区别
1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进行部分截取,并返回一个数组副本:参数start是截取的开始数组索引,end参数等于你要取的最后一个字符 ...