1

我想知道创建保存和加载逻辑的最佳方法是什么,以便我可以保存和加载 x 项。例如,在独立存储中,我可以通过执行以下操作轻松保存复合/POCO 对象:

var settings = IsolatedStorageSettings.ApplicationSettings;
settings.Add("key", myObject);

并像这样加载:

var settings = IsolatedStorageSettings.ApplicationSettings;
return settings["key"] as MyObject;

但是我将如何从独立存储中加载 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 文件。

4

1 回答 1

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);
                }
            }
        }
    }
于 2013-08-13T00:17:54.130 回答