.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 ...
随机推荐
- android中HttpClient的应用(POST方法)
首先在http://hc.apache.org/downloads.cgi下载HttpClient包 直接看代码 import android.os.Handler; import android.o ...
- Amoeba mysql读写分离搭建及介绍
Amoeba mysql读写分离搭建及介绍 推荐: http://blog.chinaunix.net/uid-20639775-id-154600.html
- Linux Skills
++实现RedHat非正常关机的自动磁盘修复先登录到服务器,然后在/etc/sysconfig里增加一个文件autofsck,内容如下:AUTOFSCK_DEF_CHECK=yesPROMPT=yes ...
- 【转】jmeter压力测试
jmeter压力测试 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域, 是压力测试的首选软件 ...
- Java-API-Package:java.sql百科
ylbtech-Java-API-Package:java.sql百科 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API.此 API 包括一个框架,凭借 ...
- Eclipse格式化代码,自动换行设置
每次用Eclipse自带的Ctrl+shift+f格式化代码时,如果原来的一行代码大于80列,Eclipse就会自动换为多行,这点个人感觉不是很舒服,简单试了一下,通过以下方式可以修改 1.pre ...
- python中的enumerate函数用于遍历序列中的元素以及它们的下标
enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')): print i,j 0 a1 b2 c ...
- ubuntu 14.04使用root登陆出现错误“Error found when loading /root/.profile”解决
在刚修改完root权限自动登录后,发现开机出现以下提示: Error found when loading /root/.profile stdin:is not a tty ----........ ...
- maven(基础介绍一)
maven:提供的作用有以下几点: 1 jar包依赖 这个也许会maven最突出的特点了使用maven不需要上网单独下载jar包,只需要在配置文件pom.xml中配置jar包的依赖关系,就可以自动的下 ...
- python's twenty eithth day for me 模块和包
模块: 什么是模块: 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,但其实import加载的模块分为四个通用类别: 1,使用python编写的代码 ...