jeffa00 отметил, что это можно сделать простой сериализацией, если ваш набор данных не очень большой. Вот полная рабочая реализация, чтобы показать, насколько это просто:
public class DataSerializer<T>
{
static XmlSerializer _serializer = new XmlSerializer(typeof(T));
static SymmetricAlgorithm _encryptionAlgorithm;
public static void SetEncryptionKey(byte[] key)
{
_encryptionAlgorithm = Aes.Create();
_encryptionAlgorithm.Key = key;
}
public static void WriteData(string filePath, T data)
{
using(var fileStream = File.OpenWrite(filePath))
{
var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Write);
_serializer.Serialize(cryptoStream, data);
cryptoStream.Flush();
}
}
public static T ReadData(string filePath)
{
using(var fileStream = File.OpenRead(filePath))
{
var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Read);
return (T)_serializer.Deserialize(Stream);
}
}
}
С этим вы можете сохранить все дерево объектов на диск в зашифрованном виде, просто выполнив:
DataSerializer<MyObjectType>.WriteData(@"c:\somewhere\something.data", myObject);
и прочитайте его обратно:
myObject = DataSerializer<MyObjectType>.ReadData(@"c:\somewhere\something.data");
Это гораздо приятнее, чем работать с SQL Server Compact или даже с полноценным SQL Server, поскольку LINQ to Objects намного мощнее LINQ to SQL. Быстрее во многих случаях.
Но это работает, только если ваш набор данных легко помещается в ОЗУ.