Сохранить и загрузить словарь из зашифрованного или нечитаемого или двоичного формата? - PullRequest
1 голос
/ 26 декабря 2010

У меня есть словарь, подобный следующему:

public Dictionary<int, SpawnList> spawnEntities = new Dictionary<int, SpawnList>();

Используемый класс выглядит следующим образом:

    public class SpawnList
    {
        public int NpcID { get; set; }
        public string Name { get; set; }
        public int Level { get; set; }
        public int TitleID { get; set; }
        public int StaticID { get; set; }

        public entityType Status { get; set; }

        public int TypeA { get; set; }
        public int TypeB { get; set; }
        public int TypeC { get; set; }

        public int ZoneID { get; set; }
        public int Heading { get; set; }
        public float PosX { get; set; }
        public float PosY { get; set; }
        public float PosZ { get; set; }
    }

/// <summary>Entity type enum.</summary>
public enum entityType
{
    Ally,
    Enemy,
    SummonPet,
    NPC,
    Object,
    Monster,
    Gatherable,
    Unknown
}
  • Как я могу сохранить этот словарь в двоичный или зашифрованный формат чтобы потом можно было снова загрузить его в мое заявление?

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

Мое ограничение: .Net 3.5 не может использовать ничего выше.

Ответы [ 3 ]

3 голосов
/ 26 декабря 2010

Отделите аспект сериализации от аспекта шифрования.Существуют различные способы сериализации данных:

  • Напишите свой собственный код сериализации
  • Используйте встроенные двоичные сериализаторы
  • Используйте встроенные сериализаторы XML
  • Используйте стороннюю платформу сериализации, такую ​​как Thrift или Protocol Buffers

Все это может позволить вам сериализовать и десериализовать в / из потока.Затем вы должны рассмотреть использование CryptoStream для обработки шифрования / дешифрования, но имейте в виду, что если ваш собственный код должен иметь возможность дешифровать данные без дополнительной информации, то он должен иметьключ, доступный для него ... что в основном означает, что он будет доступен любому, кто может запустить код тоже.

2 голосов
/ 26 декабря 2010

Отметить класс как

[Serializable]

и сериализовать его в любой поток, используя

FileStream stream = File.Create("binary.bin");
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, spawnEntities);
stream.Flush();
stream.Close();

И десериализовать его, используя

stream = File.Open("binary.bin", FileMode.Open);
spawnEntities = formatter.Deserialize(stream) as Dictionary<int, SpawnList>;
stream.Close();
0 голосов
/ 26 декабря 2010

Простой способ начать:

  1. Сделайте ваш класс сериализуемым, добавив атрибут [Serializable].
  2. Используйте CryptoStream и BinaryFormatter для сериализации в файл и шифрования данных.

Ссылка для CryptoStream предоставляет полный пример настройки шифрования и обработки связанных файлов.

...