繁体   English   中英

隔离存储和保存多个对象

[英]Isolated Storage & Saving Multiple Objects

我想知道最好的方法是创建“保存和加载”逻辑,以便我可以保存和加载x个项目。 例如,在隔离存储中,我可以通过执行以下操作轻松保存复合/ 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文件。

由于存在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);
                }
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM