保存类XNA的列表

时间:2012-09-03 10:20:00

标签: c# serialization io xna-4.0 .net

我在保存到二进制文件时遇到一些问题。

我需要将游戏信息保存到二进制文件中并在游戏加载时加载它。我试图创建一个包含所有将保存的信息的类,然后保存它。

看起来像这样:

public struct SaveGameData
{
    public List<Chunk> chunkList;
    public string saveName;
    public string playerName;
    public Vector2 playerPosition;
}

问题是Chunks列表......它没有序列化,并且该类不能序列化,因为它包含对XNA类的引用。

我保存数据的功能如下:

public static void saveGame(string mSaveFileName, SaveGameData data)
    {
        saveFileName = mSaveFileName;

        if (!Directory.Exists(saveFilePath))
        {
            Directory.CreateDirectory(saveFilePath);
        }

        FileStream stream = File.Open(saveFilePath + saveFileName + ".dat", FileMode.OpenOrCreate, FileAccess.Write);

        data.saveName = saveFileName;
        formatter.Serialize(stream, data);
        stream.Close();
    }

如何将类的实例保存到文件中,然后稍后再阅读?

1 个答案:

答案 0 :(得分:0)

保存数据时没有问题。

XNA您可以轻松地将用户或游戏详细信息的数据保存在文件中。但序列化的东西可能存在问题。这是我使用的不同选项。你可以选择任何一个。

另存为XML:如果您的类是可序列化的(带有serialize属性的类),您可以将类序列化为XML并将其自己写入磁盘。使用纯C#有很多方法可以做到这一点。这是MSDN。您可以选择其中任何一个

另存为JSON:如果您的类是可序列化的,那么您可以使用filestream将JSON保存为磁盘,因为JSON是纯字符串,您可以将数据写为流。

另存为文字:我个人从不喜欢这个,因为这个文件没有任何结构,回读很困难

另存为二进制文件:正如您在这里尝试的那样。将数据转换为添加为二进制对象。最大的回归是,即使你可以读取数据。它比选项更快,但在游戏中,实际需要进行IO操作的时间非常少。所以,我个人更喜欢上面的选择。

如果需要更多详细信息,请与我们联系。