Укажите, какие объекты вы хотите сериализовать, и поместите их в изолированное хранилище. Укажите необходимый уровень изоляции данных (уровень приложения, уровень пользователя и т. Д.).
Пример:
Вы можете создать универсальный сериализатор, очень простой пример будет выглядеть так:
public class SampleDataSerializer
{
public static void Deserialize<T>(out T data, Stream stm)
{
var xs = new XmlSerializer(typeof(T));
data = (T)xs.Deserialize(stm);
}
public static void Serialize<T>(T data, Stream stm)
{
try
{
var xs = new XmlSerializer(typeof(T));
xs.Serialize(stm, data);
}
catch (Exception e)
{
throw;
}
}
}
Обратите внимание, что вам, вероятно, следует добавить некоторые перегрузки в методы Serialize и Deserialize для размещения читателей или любых других типов, которые вы фактически используете в своем приложении (например, XmlDocuments и т. Д.).
Операция сохранения в IsolatedStorage может быть обработана служебным классом (пример ниже):
public class SampleIsolatedStorageManager : IDisposable
{
private string filename;
private string directoryname;
IsolatedStorageFile isf;
public SampleIsolatedStorageManager()
{
filename = string.Empty;
directoryname = string.Empty;
// create an ISF scoped to domain user...
isf = IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain,
typeof(System.Security.Policy.Url), typeof(System.Security.Policy.Url));
}
public void Save<T>(T parm)
{
using (IsolatedStorageFileStream stm = GetStreamByStoredType<T>(FileMode.Create))
{
SampleDataSerializer.Serialize<T>(parm, stm);
}
}
public T Restore<T>() where T : new()
{
try
{
if (GetFileNameByType<T>().Length > 0)
{
T result = new T();
using (IsolatedStorageFileStream stm = GetStreamByStoredType<T>(FileMode.Open))
{
SampleDataSerializer.Deserialize<T>(out result, stm);
}
return result;
}
else
{
return default(T);
}
}
catch
{
try
{
Clear<T>();
}
catch
{
}
return default(T);
}
}
public void Clear<T>()
{
if (isf.GetFileNames(GetFileNameByType<T>()).Length > 0)
{
isf.DeleteFile(GetFileNameByType<T>());
}
}
private string GetFileNameByType<T>()
{
return typeof(T).Name + ".cache";
}
private IsolatedStorageFileStream GetStreamByStoredType<T>(FileMode mode)
{
var stm = new IsolatedStorageFileStream(GetFileNameByType<T>(), mode, isf);
return stm;
}
#region IDisposable Members
public void Dispose()
{
isf.Close();
}
}
Наконец, не забудьте добавить следующее с помощью предложений:
using System.IO;
using System.IO.IsolatedStorage;
using System.Xml.Serialization;
Фактический код для использования классов выше может выглядеть следующим образом:
var myClass = new MyClass();
myClass.name = "something";
using (var mgr = new SampleIsolatedStorageManager())
{
mgr.Save<MyClass>(myClass);
}
Это сохранит указанный вами экземпляр для сохранения в изолированном хранилище. Чтобы получить экземпляр, просто позвоните:
using (var mgr = new SampleIsolatedStorageManager())
{
mgr.Restore<MyClass>();
}
Примечание: предоставленный мной пример поддерживает только один сериализованный экземпляр для каждого типа. Я не уверен, если вам нужно больше, чем это. Внесите любые необходимые изменения для поддержки дополнительных функций.
НТН!