问题存储孤立存储中的对象列表

我试图存储在孤立存储中创build的对象列表,并能够通过自动为它们生成标题来将它们显示在列表中。 到目前为止,代码的作品,但一旦我墓碑的应用程序,并启动它的所有数据保存除了对象的列表。 我认为我的问题可能是如何初始化列表,或者我如何显示名称。 任何帮助表示赞赏。

这段代码在我的App.xaml.cs中:

public partial class App : Application { public List<my_type> testList = new List<my_type>(); void loadvalues() { IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; List<my_Type> L; if (settings.TryGetValue<List<DrinkSesh>>("Storage", out L)) { testList = L; } } void savevalues() { IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; settings["Storage"] = testList; settings.Save(); } } 

这个代码在我的主页上,将项目添加到列表中:

 (Application.Current as App).testList.Add(new my_type()); 

这个代码是在不同的页面上实现标题到屏幕上:

  public different_class() { { InitializeComponent(); for (i = 0; i < (Application.Current as App).testList.Count; i++) { CreateATextBlock((Application.Current as App).testList[i].Title_ToString(), i); } } private void CreateATextBlock(String title,int num) { testblockname = new TextBlock(); testblockname.Text = (num + 1) + ". " + title; DrList.Children.Add(testblockname); } } 

先谢谢你!

Solutions Collecting From Web of "问题存储孤立存储中的对象列表"

这里是我用来保存和加载孤立存储对象列表的代码。

 public class IsoStoreHelper { private static IsolatedStorageFile _isoStore; public static IsolatedStorageFile IsoStore { get { return _isoStore ?? (_isoStore = IsolatedStorageFile.GetUserStoreForApplication()); } } public static void SaveList<T>(string folderName, string dataName, ObservableCollection<T> dataList) where T : class { if (!IsoStore.DirectoryExists(folderName)) { IsoStore.CreateDirectory(folderName); } string fileStreamName = string.Format("{0}\\{1}.dat", folderName, dataName); using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileStreamName, FileMode.Create, IsoStore)) { DataContractSerializer dcs = new DataContractSerializer(typeof(ObservableCollection<T>)); dcs.WriteObject(stream, dataList); } } public static ObservableCollection<T> LoadList<T>(string folderName, string dataName) where T : class { ObservableCollection<T> retval = new ObservableCollection<T>(); if (!IsoStore.DirectoryExists(folderName)) { IsoStore.CreateDirectory(folderName); } string fileStreamName = string.Format("{0}\\{1}.dat", folderName, dataName); using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileStreamName, FileMode.OpenOrCreate, IsoStore)) { if (stream.Length > 0) { DataContractSerializer dcs = new DataContractSerializer(typeof(ObservableCollection<T>)); retval = dcs.ReadObject(stream) as ObservableCollection<T>; } } return retval; } } 

通过简单地将你的集合(List)添加到你的IsolatedStorageSettings中,你依靠内置的序列化器(DataContractSerializer)来序列化你的对象以保存到磁盘。

你确定你的对象可以被正确的序列化和反序列化吗?

自己这样做可能是最简单的方法。

如果你自己这样做,不是:DataContractSerializer慢 – DataContractJsonSerializer更快 – Json.net更快 – 二进制序列化是最快的。

当序列化自己时,你也应该保存在一个IsolatedStorageFile rahter比在设置。 这可以帮助提高性能,并增加灵活性,可以帮助调试和测试。