概念啥的就不講了,直接實現把。
序列化使用到了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就是序列化的正反過程。