隔离存储&;保存多个对象

本文关键字:对象 保存 存储 amp 隔离 | 更新日期: 2023-09-27 18:27:20

我想知道创建保存和加载逻辑的最佳方法是什么,这样我就可以保存和加载x个项目。例如,在隔离存储中,我可以通过以下操作轻松地保存复合/PCO对象:

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文件。

隔离存储&;保存多个对象

由于MSDN:IsolatedStorageSettings提供了一种将用户特定数据作为键值对存储在本地IsolatedSorageFile中的方便方法。典型的用途是保存设置,例如每页要显示的图像数量、页面布局选项等

所以我不认为使用IsolatedStorageSettings是您的最佳选择,如果我是您,我会使用IsolaterStorageFile。

要保存和加载列表的内容,场景将是

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);
                }
            }
        }
    }