@Jonnaにあなたのオブジェクトをシリアル化するための汎用的な方法です。私もこのことについて審議しました。私は以下の汎用メソッドを使用して/ adapatingして、以下のようにIsolatedStorageFileを使用してシリアライズおよびデシリアライズを行いました。データを更新しようとしているときにファイルがすでに存在する場合、ファイルの削除も含まれます。
internal static void Write<T>(T obj, string fileName)
{
XmlWriterSettings writerSettings = new XmlWriterSettings
{
Indent = true,
IndentChars = "\t"
};
try
{
using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isoStore.FileExists(fileName))
{
isoStore.DeleteFile(fileName);
}
using (var isoStream = new IsolatedStorageFileStream(fileName, FileMode.Create, isoStore))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (XmlWriter xmlWriter = XmlWriter.Create(isoStream, writerSettings))
{
serializer.Serialize(xmlWriter, obj);
}
}
}
}
catch (IsolatedStorageException ex)
{
Debug.WriteLine(ex.Message);
}
catch (Exception emAll)
{
Debug.WriteLine(emAll.Message);
}
}
internal static T Read<T>(string fileName)
{
try
{
using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var isoStream = new IsolatedStorageFileStream(fileName, FileMode.Open, isoStore))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(isoStream);
}
}
}
catch (IsolatedStorageException ex)
{
Debug.WriteLine(ex.Message);
throw;
}
catch (Exception emAll)
{
Debug.WriteLine(emAll.Message);
throw;
}
}
シリアル化は、このように呼ばれるであろう:
Serialization.Write<user>(userDetails, App.USERDETAILS);
そしてデシリアライズは、このように呼ばれるであろう:
Items = Serialization.Read<measurements>(App.MEASUREMENTS);
ユーザは、クラスとuserDetailsでは、そのクラスに基づいてオブジェクトです。 Measurementsはクラスであり、Itemsはそのクラスに基づくオブジェクトです。 App.USERDETAILS & App.MEASUREMENTSは、ファイル名を含むグローバル文字列です。
デバッグ行がそのまま残っているため、進行状況を追跡できます。
マンゴーへの移行を考えている場合は、SQL + LINQを使用することを検討する価値があるかもしれません。その多くはそこで処理される可能性があります。