【C#】C#中實現序列化

概念啥的就不講了,直接實現把。

序列化使用到了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就是序列化的正反過程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章