C # Сохранение нескольких объектов в файл - PullRequest
2 голосов
/ 20 января 2011

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

Что мне использовать?Вот что мне нужно сериализовать:

    GameWorld
    Inventory
    Player
    List<Item>

    Point
    List<String>

Вот переменные, которые есть в классах:

    public class GameWorld
    {
        Dictionary<Point, Room>
    }

    public class Item
    {
        String Creator
        String Verb
        String RequiredItem
        Action OnActivate
        int Difficulty
        Action OnDefeatEnemy
        Action OnDefeatedByEnemy 
    }

    public class Room
    {
        String Title
        String Description
        List<Item> Items
        List<String> ItemNames
        String Creator
    }

    public class Inventory
    {
        List<Items>
    }

    public enum ActionType
    {
        ACQUIRE_GOLD, DECREASE_HEALTH, INCREASE_HEALTH, DECREASE_STRENGTH, INCREASE_STRENGTH, GET_ITEM, PRINT_MESSAGE
    }

    public class Action
    {
        ActionType actionType
        int Amount
        String GiveItem
        String Message
        String Creator
        bool SingleActivation
        bool HasActivated
    }

Ответы [ 5 ]

3 голосов
/ 20 января 2011

Использование Двоичная сериализация слегка запутывает.

[Это не остановит кого-то с Reflector и хотя бы немного покопаться в вашем коде и файлах данных]

2 голосов
/ 20 января 2011

Вы можете довольно легко сериализовать в XML, а затем зашифровать его перед сохранением в файл.

1 голос
/ 20 января 2011

Управлять хранимым объектом проще, программно, используя встроенную базу данных объектов, такую ​​как Db4o или Eloquera.

1 голос
/ 20 января 2011

http://www.codeproject.com/KB/cs/objserial.aspx

Будет ли это работать для вас?

0 голосов
/ 20 января 2011

Если вы не беспокоитесь о раскрытии, вы можете просто добавить хеш [ваши сериализованные данные, объединенные с некоторой магической константой]. Тогда хакеру придется разобрать вашу программу, чтобы найти константу, если он хочет манипулировать вашими сериализованными данными.

Если раскрытие является проблемой, тогда я бы порекомендовал «шифрование» с магической константой. Это на самом деле просто форма скремблирования контента, поскольку магическая константа «известна» (хотя, возможно, это неприятно найти).

Кстати, ваша проблема аналогична проблеме DRM, которая действительно неразрешима, если у вас нет полного контроля над клиентской платформой. http://www.schneier.com/crypto-gram-0105.html#3

...