[笔记]序列化与反序列化的讨论(一)

原创 2007年09月24日 16:34:00

序列化:当我们需要将某个值(或者类)存储在某个媒介上或者进行传输,其中一个办法就是对其进行序列化。序列化将生成一个二进制流,根据不同的情况,这个流可以定位到文件或者网络流。

反序列化:当我们获得一个流以后,需要从这个流中把原来的值(或者类)精确地还原,就称为反序列化。 

概念太枯燥了,用一些例子可能更好理解

单个类的序列化和反序列化

喜欢玩游戏的都知道,每一个游戏都有存盘文件,上面记录了我们的心血。这个存盘文件,实际上就是一个序列化过的二进制文件。我们来看看游戏是如何做的。玩家选择存盘,首先,游戏中的数据就会放到一个类中,然后,对这个类使用序列化,这个类中的所有信息,就会被依次序列化到文件中。当我们读取游戏进度的时候则刚好相反,是从游戏存盘文件获得二进制流,然后根据这个二进制流来还原本来的数据,来达到读取进度的目的,这就是反序列化。 

[Serializable]
public class Player
{
public string Name;
public uint Level;
public uint Hp;
public uint HpMax;
public uint Mp;
public uint MpMax;
public uint Exp;
public uint ExpMax;
}


[Serializable]
public class Item
{
public ushort ItemCode;
public string Name;
public string Description;
public uint Quantity;
}


[Serializable]
public class SaveData
{
public Player player;
public Item[] items;

// 序列化方法
public static void Save(SaveData sav)
{
IFormatter formatter 
= new BinaryFormatter();
Stream s 
= new FileStream (@"D:Save.dat",FileMode.Create,
FileAccess.Write, FileShare.None);

// 开始序列化
formatter.Serialize(s, sav);
s.Close();
s.Dispose();
}


// 反序列化方法
public static SaveData Load()
{
BinaryFormatter formatter 
= new BinaryFormatter();
Stream s 
= new FileStream(@"D:Save.dat", FileMode.Open, 
FileAccess.Read, FileShare.None);
SaveData sav 
= (SaveData)formatter.Deserialize(s);
s.Close();
s.Dispose();
return sav;
}

}

在.NET环境下,每一个允许被序列化的类和方法,必须加上[Serializable]字样。表示该类允许被序列化,如果其中一个没有加,就会抛出SerializationException的异常。

有时候,并不是所有变量都是需要序列化的。这时候,可以在该变量前加上[NonSerialized]属性。比如线程ID,这类变量是后来生成的。所以,我们可以写如下代码声明,不需要将这个属性记录。

[Serializable]
public class Player
{
public string Name;
public uint Level;
public uint Hp;
public uint HpMax;
public uint Mp;
public uint MpMax;
public uint Exp;
public uint ExpMax;
[NonSerialized]
public string ThreadId;
}

下一次再探讨网络通讯中的序列化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Json反序列化实例源码

  • 2012-12-28 13:37
  • 934KB
  • 下载

反序列化Json

1.在C#中反序列化的方法来源一般有两种。一种是第三方类库Newtonsoft.json.dll 另一种就是微软封装好的类库 命名空间为:using System.Web.Script.Seriali...

反序列化作用

  • 2013-07-04 07:12
  • 104KB
  • 下载

单例模式中解决反射和反序列化漏洞

转载自:http://blog.csdn.net/hardwin/article/details/51477359 一、懒汉式单例模式,解决反射和反序列化漏洞 [java]...

Java 反序列化检测工具

  • 2016-04-18 09:49
  • 36.35MB
  • 下载

JBOSS反序列化

  • 2016-03-28 21:13
  • 5.31MB
  • 下载

Gson Advanced — 自定义反序列化基础

本文将介绍使用 Gson 自定义反序列化基础,我们很多情况是客户端不需要完全匹配服务端返回的 JSON 数据。自定义反序列化应用中很常见 Server 端返回数据并不是我们想要的结构,这种情况就需要我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)