概念啥的就不讲了,直接实现把。
序列化使用到了C#中的BinaryFormatter 类。
首先我有一个Fighting类,里面有一个FightingConfigure类的实例。并且还有一个FightingConfigure类。结构如下
public class Fighting
{
public FightingConfigure fightingConfigure;//战斗配置
}
public class FightingConfigure
{
public int playerNumber;//参加战斗的人数
public string screenName;//战斗的场景名
}
接着我在主函数中实例化了这个Fighting类,并为它赋了值。
class Program
{
static void Main(string[] args)
{
Fighting fighting=new Fighting();
fighting.fightingConfigure=new FightingConfigure();
fighting.fightingConfigure.playerNumber=2;
fighting.fightingConfigure.screenName="City";
}
}
我的目标就是将这个Fighting对象序列化。
这里序列化主要分为两步:
1.在需要序列化的类前加上[serializable]标识
注意:虽然只序列化Fighting类,但依然需要给FightingConfigure也加上标识,因为在Fighting类的成员变量中使用到了该类。
[serializable]
public class Fighting
{
public FightingConfigure fightingConfigure;//战斗配置
}
[serializable]
public class FightingConfigure
{
public int playerNumber;
public string screenName;
}
2.使用BinaryFormatter进行序列化
在主函数中调用:
class Program
{
//序列化
public void Serialize(object obj)
{
FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate);
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileStream, obj);
fileStream.Close();
}
//反序列化
public object Deserialize()
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream fileStream = new FileStream(filename, FileMode.Open);
object obj = binaryFormatter.Deserialize(fileStream);
return obj;
}
static void Main(string[] args)
{
Fighting fighting=new Fighting();
fighting.fightingConfigure=new FightingConfigure();
fighting.fightingConfigure.playerNumber=2;
fighting.fightingConfigure.screenName="City";
/*序列化*/
Serialize("data.bin");
/*反序列化*/
Fighting defighting = Deserialize("data.bin") as Fighting;
Console.WriteLine("战斗的玩家数量为:{0};战斗场景为:{1}。",
defighting.fightingConfigure.playerNumber,
defighting.fightingConfigure.screenName);
}
}
至此大功告成。上面封装的两个函数Serialize和DeSerialize就是序列化的正反过程。序列化的文件被存在data.bin中。可以通过反序列化再次读取。