http://whydoidoit.com/のSilverlightSerializerを使用して、オブジェクトを分離されたストレージにシリアル化します。その本当に良いシリアライザー-その高速でそのファイルは小さいです。保存と取得に使用されるコードは
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とリポジトリには、リストを複数のファイルに保存して返すなどの方法がいくつかあります。すべてニーズによって異なりますが、SilverlightSerializerを確認することをお勧めします。ものすごく単純。