Сохранение списка класса XNA

У меня проблемы с сохранением в бинарный файл.

Мне нужно сохранить информацию об игре в двоичный файл и загрузить его при загрузке игры. Я попытался создать класс со всей информацией, которая будет сохранена, а затем сохранить ее.

Это выглядит так:

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

Проблема заключается в списке фрагментов... Он не сериализуется, и класс нельзя сериализовать, поскольку он содержит ссылки на классы 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();
    }

Как сохранить экземпляр класса в файл, а затем прочитать его позже?


person loffa    schedule 03.09.2012    source источник
comment
Ну, не так просто просто вызвать сериализацию и все готово. Вы должны правильно решить и сделать свой класс сериализуемым. См. это для получения дополнительной информации. И последний совет: сериализуйте только очень простые данные. Если вы хотите сериализовать сложные классы, такие как текстуры, это не сработает. Если вашими классами XNA являются векторы и матрицы, все должно быть в порядке.   -  person dowhilefor    schedule 03.09.2012
comment
Можете ли вы дать Chunk определение?   -  person Seb    schedule 03.09.2012


Ответы (1)


При сохранении данных проблем нет.

XNA позволяет легко сохранять данные о пользователе или детали игры в файлы. Но может быть проблема с сериализацией материала. Вот другой вариант, который я использовал. Вы можете выбрать любой из них.

Сохранить как XML: если ваш класс сериализуем (класс с атрибутом сериализации), вы можете сериализовать класс в XML и записать его на диск. Есть много способов сделать это, используя чистый C#. Вот его MSDN. Вы можете выбрать любой из них

Сохранить как JSON: если ваш класс сериализуем, вы можете сохранить его как JSON на диске, используя файловый поток, поскольку JSON — это чистая строка, и вы можете записывать данные как поток.

Сохранить как текст: я лично никогда не предпочитаю этот вариант, так как этот файл не имеет никакой структуры и чтение назад затруднено.

Сохранить как двоичный файл: как вы пытаетесь здесь. Преобразовать данные как добавить как двоичный объект. Самым большим недостатком для этого является то, что вы даже можете прочитать данные. Это быстрее, чем вариант «о», но в игре гораздо меньше моментов, когда вам действительно нужно выполнить операцию ввода-вывода. Так что лично я предпочитаю вышеуказанные варианты.

Пожалуйста, дайте мне знать, если требуется дополнительная информация.

person kunjee    schedule 09.08.2013