我想知道创建保存和加载逻辑的最佳方法是什么,以便我可以保存和加载x项。例如,在Isolated Storage中,我可以通过以下方式轻松保存复合/ POCO对象:
var settings = IsolatedStorageSettings.ApplicationSettings;
settings.Add("key", myObject);
像这样加载:
var settings = IsolatedStorageSettings.ApplicationSettings;
return settings["key"] as MyObject;
但是我如何从IsolatedStorage加载x个对象?是否最好创建一个List<MyObject>
集合并保存,每当我想保存另一个对象时,我基本上加载现有的并执行.Add(newObject)
并再次保存?
这样的事情:
List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(newObject);
settings.Add("myObjects", myObjects);
加载时:
var myObjects = settings["myObjects"] as List<MyObject>;
但是,这需要删除并重新添加集合,因为settings.Add
需要一个唯一的密钥。这会是最好的方式吗?
我更喜欢使用设置而不是Iso文件。
答案 0 :(得分:1)
由于MSDN:IsolatedStorageSettings提供了一种将用户特定数据作为键值对存储在本地IsolatedStorageFile中的便捷方式。典型用法是保存设置,例如每页显示的图像数量,页面布局选项等。
所以我不认为使用IsolatedStorageSettings会是你最好的选择,如果我是你,我会使用IsolatedStorageFile。
要保存并加载列表内容,方案将是
1-如果在列表中添加或删除项目,则将列表分类为xml并保存它IsolatedStorageFile
private static void Serialize(string fileName, object source)
{
var userStore = IsolatedStorageFile.GetUserStoreForApplication();
using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, userStore))
{
XmlSerializer serializer = new XmlSerializer(source.GetType());
serializer.Serialize(stream, source);
}
}
2-如果要在任何地方加载列表,可以反序列化存储在IsolatedStorageFile中的xml文件
public static void Deserialize<T>(ObservableCollection<T> list , string filename)
{
list = new ObservableCollection<T>();
var userStore = IsolatedStorageFile.GetUserStoreForApplication();
if (userStore.FileExists(filename))
{
using (var stream = new IsolatedStorageFileStream(filename, FileMode.Open, userStore))
{
XmlSerializer serializer = new XmlSerializer(list.GetType());
var items = (ObservableCollection<T>)serializer.Deserialize(stream);
foreach (T item in items)
{
list.Add(item);
}
}
}
}