我正在使用这些方法将 XML 文件保存和加载到 IsolatedStorage 中:
public static class IsolatedStorageOperations
{
public static async Task Save<T>(this T obj, string file)
{
await Task.Run(() =>
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream stream = null;
try
{
stream = storage.CreateFile(file);
XmlSerializer serializer = new XmlSerializer(typeof (T));
serializer.Serialize(stream, obj);
}
catch (Exception)
{
}
finally
{
if (stream != null)
{
stream.Close();
stream.Dispose();
}
}
});
}
public static async Task<T> Load<T>(string file)
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
T obj = Activator.CreateInstance<T>();
if (storage.FileExists(file))
{
IsolatedStorageFileStream stream = null;
try
{
stream = storage.OpenFile(file, FileMode.Open);
XmlSerializer serializer = new XmlSerializer(typeof (T));
obj = (T) serializer.Deserialize(stream);
}
catch (Exception)
{
}
finally
{
if (stream != null)
{
stream.Close();
stream.Dispose();
}
}
return obj;
}
await obj.Save(file);
return obj;
}
}
您可以在 catch() 中自定义错误处理。
此外,您可以根据需要调整 Load 方法,在我的情况下,我试图从文件中加载,如果不存在,它会创建一个默认值并放置根据构造函数提供的类型的默认序列化对象。
更新 :
假设您有汽车清单:
List< Car > carlist= new List< Car >();
要保存,您可以将它们称为 await carlist.Save("myXML.xml");
,因为它是异步的Task
( async
)。
加载,var MyCars = await IsolatedStorageOperations.Load< List< Car> >("myXML.xml").
(我想,到目前为止,我还没有像这样使用它作为列表......