C#将多个对象保存到文件

时间:2011-01-20 01:58:43

标签: c# save

基本上,我正在使用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 个答案:

答案 0 :(得分:3)

使用Binary serialization会略微混淆。

[虽然不会阻止有人使用Reflector,但你的代码和数据文件会有点蠢]

答案 1 :(得分:2)

您可以很容易地序列化为xml,然后在将其保存到文件之前对其进行加密。

答案 2 :(得分:1)

答案 3 :(得分:1)

使用嵌入式对象数据库(如Db4o或Eloquera)以编程方式管理存储对象更容易。

答案 4 :(得分:0)

如果您不担心披露,您可以添加[您的序列化数据与某些魔术常量连接]的哈希值。如果他们想要操纵您的序列化数据,黑客就必须反汇编您的程序以找到常量。

如果披露是一个问题,那么我会建议使用魔术常量“加密”。这实际上只是一种内容扰乱的形式,因为魔法常数是“已知的”(尽管可能是一种令人讨厌的东西)。

顺便说一句,您的问题类似于DRM问题,除非您完全控制客户端平台,否则这个问题确实无法解决。 http://www.schneier.com/crypto-gram-0105.html#3