C# 隔离储存及;保存多个对象

C# 隔离储存及;保存多个对象,c#,windows-phone-8,isolatedstorage,C#,Windows Phone 8,Isolatedstorage,我想知道创建保存和加载逻辑的最佳方法是什么,这样我就可以保存和加载x项。例如,在独立存储中,我可以通过执行以下操作轻松保存复合/POCO对象: var settings = IsolatedStorageSettings.ApplicationSettings; settings.Add("key", myObject); 然后像这样加载: var settings = IsolatedStorageSettings.ApplicationSettings; return settings["

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

var settings = IsolatedStorageSettings.ApplicationSettings;
settings.Add("key", myObject);
然后像这样加载:

var settings = IsolatedStorageSettings.ApplicationSettings;
return settings["key"] as MyObject;
List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(newObject);
settings.Add("myObjects", myObjects);
但是如何从IsolatedStorage加载x个数量的对象呢?是否最好创建一个
列表
集合并保存,当我想保存另一个对象时,我基本上会加载现有对象并执行
。添加(新对象)
并再次保存

比如说:

var settings = IsolatedStorageSettings.ApplicationSettings;
return settings["key"] as MyObject;
List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(newObject);
settings.Add("myObjects", myObjects);
List myObjects=new List();
myObjects.Add(newObject);
设置。添加(“myObjects”,myObjects);
加载时:

var myObjects = settings["myObjects"] as List<MyObject>;
var myObjects=设置[“myObjects”]作为列表;
但是,这需要删除集合并将其添加回设置中。添加需要唯一的键。这是最好的方式吗


我更愿意使用设置而不是Iso文件。

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

所以我不认为使用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);
        }
    }
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);
                }
            }
        }
    }
2-当您希望在任何位置加载列表时,您将反序列化存储在IsolatedStorageFile中的xml文件

 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);
        }
    }
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);
                }
            }
        }
    }
publicstaticvoid反序列化(ObservableCollection列表,字符串文件名)
{
列表=新的ObservableCollection();
var userStore=IsolatedStorageFile.GetUserStoreForApplication();
if(userStore.FileExists(filename))
{
使用(var stream=new-IsolatedStorageFileStream(文件名,FileMode.Open,userStore))
{
XmlSerializer serializer=新的XmlSerializer(list.GetType());
var items=(ObservableCollection)序列化程序。反序列化(流);
foreach(项目中的T项目)
{
列表。添加(项目);
}
}
}
}

由于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);
        }
    }
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);
                }
            }
        }
    }
2-当您希望在任何位置加载列表时,您将反序列化存储在IsolatedStorageFile中的xml文件

 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);
        }
    }
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);
                }
            }
        }
    }
publicstaticvoid反序列化(ObservableCollection列表,字符串文件名)
{
列表=新的ObservableCollection();
var userStore=IsolatedStorageFile.GetUserStoreForApplication();
if(userStore.FileExists(filename))
{
使用(var stream=new-IsolatedStorageFileStream(文件名,FileMode.Open,userStore))
{
XmlSerializer serializer=新的XmlSerializer(list.GetType());
var items=(ObservableCollection)序列化程序。反序列化(流);
foreach(项目中的T项目)
{
列表。添加(项目);
}
}
}
}

我所做的是创建一个xml文件,并在每次需要保存时替换它。如果您不经常保存数据,并且数据很小,那么它就可以正常工作。另外,您应该使用“真实”数据库我所做的是创建一个xml文件,并在每次需要保存某些内容时替换它。如果您不经常保存数据,并且数据很小,那么它就可以正常工作。除此之外,你应该使用一个“真实的”数据库Hi Ahmed。非常感谢。我可以不做任何修改就按原样使用代码吗?在代码的第一部分,使用FileMode.OpenOrCreate会更好吗?呃,我相信你能做到!事实上,我无法决定哪一个更好(从性能角度来看,可能是FileMode.OpenorCreate),但我知道的是FileMode.Create将覆盖文件(如果它已经存在),否则创建一个新文件,这就是我在代码中需要的。最后,如果您使用FileMode.OpenorCreate,当您尝试反序列化xml文件时,它将导致异常。请详细说明一下好吗?请尝试阅读更多关于XmlSerializer类和Serialize和deserialize方法Serialize方法序列化指定对象,并使用指定流将XML文档写入文件,流是使用var Stream=new IsolatedStorageFileStream(filename,FileMode.Open,userstore)创建的;嗨,艾哈迈德。非常感谢。我可以不做任何修改就按原样使用代码吗?在代码的第一部分,使用FileMode.OpenOrCreate会更好吗?呃,我相信你能做到!事实上,我无法决定哪一个更好(从性能角度来看,可能是FileMode.OpenorCreate),但我知道的是FileMode.Create将覆盖文件(如果它已经存在),否则创建一个新文件,这就是我在代码中需要的。最后,如果您使用FileMode.OpenorCreate,当您尝试反序列化xml文件时,它将导致异常。请详细说明一下好吗?请尝试阅读更多关于XmlSerializer类和Serialize和deserialize方法Serialize方法序列化指定的对象,并使用指定的Stre将XML文档写入文件