如何使用C#将自定义对象正确存储在隔离存储中?

时间:2012-12-01 09:22:25

标签: c# isolatedstorage windows-phone-8

使用WP8处理sideproject,但无法使IsolatedStorage正常工作。我看过几十个看似问同样问题的帖子,但我还没有能够得到任何解决方案。该应用程序是一个简单的任务组织器,我在其中创建了自己的任务对象,一个是摘要任务,每个SummaryTask包含一个BasicTasks列表。我曾尝试使用XMLSerializing只遇到问题,因为我使用的是ObservableCollection。以为我可以将集合更改为INotifyPropertyChanged的子类,但这也不起作用。坦率地说,无论如何,我仍然掌握两者之间的差异。所以无论如何,我最近的尝试涉及尝试使用IsolatedStorage设置,但也没有用。这是我的班级定义:

class SummaryTask : TaskItem
{
    public List<BasicTask> children = new List<BasicTask>();
    private string sumTaskName;
    private int sumTaskId;
    public SummaryTask()
    {

    }
    public SummaryTask(string name, int id)
    {
        sumTaskName = name;
        sumTaskId = id;
    }
    public string SumTaskName
    {
        get { return sumTaskName; }
        set { sumTaskName = value; }
    }
    public int SumTaskId
    {
        get { return sumTaskId; }
        set { sumTaskId = value; }
    }
    public void addTask(string taskName, string taskText, int taskId){
        children.Add(new BasicTask(taskName, taskText, taskId));
    }
    public List<BasicTask> CHILDREN
    {
        get { return children; }
    }
}
}

我在Global变量中创建了此SummaryTask的列表,并在我的页面中使用它以便于访问。以下是我的MainPage.xaml.cs文件的开头看起来更新:

    public MainPage()
    {
        InitializeComponent();
        BackKeyPress += OnBackKeyPressed;
        if (Global.settings.Contains("list"))
        {
            Global.list = (List<SummaryTask>)Global.settings["list"];
        }
        else
        {
            Global.list = new List<SummaryTask>();
        }
    }

我的代码质量差以及如何改进代码的指导也被接受。谢谢。

编辑:该异常表示已创建具有相同键的项目。在这种情况下,堆栈跟踪没有显示任何重要的东西。我还应该注意,在将对象添加到列表并尝试保存它之后抛出异常,而不是在编译时抛出异常。

我用来尝试保存到隔离存储的代码片段在这里,当我导航到MainPage.xaml时触发:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        resultList.SelectedItem = null;
        Global.settings["list"] = Global.list;
        Global.settings.Save();
    }

不再有例外,但退出应用并重新输入并不会提取任何已保存的数据。

1 个答案:

答案 0 :(得分:0)

Add的问题很容易修复 - 只需使用索引器,它允许您覆盖具有相同名称的条目:

settings["list"] = Global.list;

这不会修复Save来电......但您需要提供更多有关异常(不仅仅是“告诉我”,完整异常详情)的详细信息,以帮助我们为您提供更多帮助