序列化:序列化指的是 将对象 通过流的方式 保存为一个文件。 反序列化则是将该文件还原成 对象的过程。

序列化的作用:序列化可以跨语言跨平台 传输数据,将某一对象序列化成通用的文件格式在进行传输。 比如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的更多相关文章

  1. Java序列化与反序列化(Serializable)

    Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...

  2. 序列化与反序列化总结(Serializable和Parcelable)

    序列化是指将对象的状态信息转换为可以存储或传输的形式的过程. 在Java中创建的对象,只要没有被回收就可以被复用,但是,创建的这些对象都是存在于JVM的堆内存中,JVM处于运行状态时候,这些对象可以复 ...

  3. 序列化、反序列化(Serializable特性)

    //需要被实例化的类 using System.Collections; using UnityEngine; [Serializable] public class SerializableClas ...

  4. 使用Serializable接口进行JAVA的序列化和反序列化

    OBJECT STREAMS – SERIALIZATION AND DESERIALIZATION IN JAVA EXAMPLE USING SERIALIZABLE INTERFACE Hite ...

  5. Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释

    遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,seria ...

  6. Serializable 接口与 Java 序列化与反序列化

    0. 序列化的意义 从内存到本地即为本地化或者在网络中进行传输,或叫序列化,持久化. 某 Java 类实现 Serializable 接口的目的是为了可持久化(简单理解为本地化),比如网络传输或本地存 ...

  7. [转]Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释

    原文地址:https://blog.csdn.net/qq_27093465/article/details/78544505 遇到这个 Java Serializable 序列化这个接口,我们可能会 ...

  8. Java 对象序列化和反序列化 (实现 Serializable 接口)

    序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.  把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放 ...

  9. 71 Serializable(序列化和反序列化)

    对象的输出流:ObjectOutputStream  把对象输出到文件存储起来,我们称作为序列化对象的输入流:ObjectInputStream   把对象从文件中读取出来,我们称作为反序列化 Obj ...

随机推荐

  1. emqtt 4 (我要publish消息了)

    这次,分析处理publish msg的流程. 由protocol开始 publish 类型的packet的处理是: process(Packet = ?PUBLISH_PACKET(_Qos, Top ...

  2. 安装Visual C ++进行跨平台移动开发

    Visual Studio 2015   Visual Studio文档的新家是docs.microsoft.com上的Visual Studio 2017文档 . 有关Visual Studio 2 ...

  3. 1117 Eddington Number

    题意:给出了N个数字,确定一个尽可能大的数字E,要求这N个数字中大于E的数字有E个. 思路: 乍一看不知道题目在说啥.静下心来多读几遍题目,在草稿纸上比划比划,发现是个大水题.解释一下样例,原始序列为 ...

  4. PL/SQL 训练07--发现问题

    drop table ma_schedue_task ; ---test_task(:1,:2) create table ma_schedue_task( created_by ) default ...

  5. 010. VS2015创建MVC项目

    1. 文件→新建→项目 2.选择空模板→选中MVC 3. 预览(如果是使用aspx, 则可以删除Views中的web.config, 如果使用Razor则不要删除, 否则会报Views/Home/In ...

  6. TCP与UDP比较 以及并发编程基础知识

    一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...

  7. java常见的几种调用机制(同步调用,异步调用,回调)

    1.同步调用 同步调用是最基本的调用方式,对象b中的方法直接调用对象a的方法,这个时候程序会等待对象a的方法执行完返回结果之后才会继续往下走. 代码如下: public class A {public ...

  8. easyUI datagrid表格添加“暂无记录”显示

    扩展grid的onAfterRender事件 var myview = $.extend({}, $.fn.datagrid.defaults.view, {     onAfterRender: f ...

  9. Java微信公众平台开发(十二)--微信用户信息的获取

    转自:http://www.cuiyongzhi.com/post/56.html 前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信 ...

  10. Full Binary Tree(sdut 2882)

    Problem Description: In computer science, a binary tree is a tree data structure in which each node ...