我使用来自http://whydoidoit.com/的 Silverlight 序列化程序,并将对象序列化到独立存储。它是一个非常好的序列化程序——速度快而且文件很小。用于保存和检索的代码是
public static void SaveFile(string filename, object serializableObject, Type type)
{
using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication())
{
if (userStore.FileExists(filename))
{
userStore.DeleteFile(filename);
}
using (IsolatedStorageFileStream stream = userStore.CreateFile(filename))
{
SilverlightSerializer.Serialize(serializableObject, stream);
}
}
}
public static object LoadSerializedObjectFromFile(string filename, Type type)
{
using (IsolatedStorageFile userStore =
IsolatedStorageFile.GetUserStoreForApplication())
{
if (userStore.FileExists(filename))
{
using (IsolatedStorageFileStream stream = userStore.OpenFile(filename, FileMode.Open))
{
return SilverlightSerializer.Deserialize(stream);
}
}
}
return null;
}
我通常将单个文件包装在存储库中(模式)。例如,在我的 Good Deal 应用程序中,我有一个 DealRepository。在该存储库中,我有一个静态 Load 方法,如下所示:
private static IDeal LoadRecentDeal()
{
IDeal savedDeals = IsolatedStorageHelper.LoadSerializedObjectFromFile(RecentDealFileName, typeof(Deal)) as Deal;
if (savedDeals != null)
{
return savedDeals;
}
else
{
return Deal.CreateNewDeal(RecentDealFileName);
}
}
内部保存方法是这样的:
public void Save(IDeal deal)
{
deal.LastModifiedDate = DateTime.Now;
//
string fileName;
if (deal.Name == RecentDealFileName)
{
fileName = RecentDealFileName;
}
else
{
fileName = SavedDirectoryName + Path.DirectorySeparatorChar + deal.ID.ToString();
}
IsolatedStorageHelper.SaveFile(fileName, deal, typeof(IDeal));
}
此外,IsolatedStorageHelper 和存储库上还有其他几种方法用于执行操作,例如保存多个文件中的列表并返回它们......等等。一切都取决于您的需求 - 但我建议您查看 Silverlight 序列化程序,它可以做到很简单。