如何在PhoneApplicationService.Current.State中保存和检索列表?

时间:2011-10-17 07:41:05

标签: windows-phone-7 isolatedstorage

我需要在PhoneApplicationService.Current.State[]中存储和检索列表,但这不是字符串或整数列表:

    public class searchResults
    {
        public string title { get; set; }
        public string description { get; set; }
    }

    public List<searchResults> resultData = new List<searchResults>()
    {
        // 
    };

结果的值是从互联网上获取的,当切换应用程序时,这些数据需要保存在独立存储中以进行多任务处理。如何保存此列表并再次检索?

3 个答案:

答案 0 :(得分:2)

如果问题确实是关于如何保存数据,那么你只需要

    PhoneApplicationService.Current.State["SearchResultList"] = resultData;

再次检索

    List<searchResults> loadedResultData = (List<searchResults>)PhoneApplicationService.Current.State["SearchResultList"];

这是一份完整的工作样本:

    // your list for results
    List<searchResults> resultData = new List<searchResults>();
    // add some example data to save
    resultData.Add(new searchResults() { description = "A description", title = "A title" });
    resultData.Add(new searchResults() { description = "Another description", title = "Another title" });
    // save list of search results to app state
    PhoneApplicationService.Current.State["SearchResultList"] = resultData;

    // --------------------->
    // your app could now be tombstoned
    // <---------------------

    // load from app state
    List<searchResults> loadedResultData = (List<searchResults>)PhoneApplicationService.Current.State["SearchResultList"];

    // check if loading from app state succeeded
    foreach (searchResults result in loadedResultData)
    {
        System.Diagnostics.Debug.WriteLine(result.title);
    }

(当数据结构变得更复杂或包含某些类型时,这可能会停止工作。)

答案 1 :(得分:0)

听起来您只想对列表对象使用标准序列化,请参阅MSDN文档中的内容 http://msdn.microsoft.com/en-us/library/ms973893.aspx

或者,如果您想要可以在应用程序之外编辑的内容,还可以使用XML序列化(您也可以使用隔离存储过滤器来获取文件并稍后进行编辑) http://msdn.microsoft.com/en-us/library/182eeyhh(v=vs.71).aspx

或者我也建议尝试Matt Lacey的Tombstone Helper项目,它可以为你简化这个 http://tombstonehelper.codeplex.com/

答案 2 :(得分:0)

Heinrich的答案已经总结了这里的主要想法 - 您可以将PhoneApplicationService.State与Lists一起使用,就像使用任何对象一样。查看有关保留应用程序状态的MSDN文档:How to: Preserve and Restore Application State for Windows Phone。有一点需要注意:

  

您存储在State字典中的任何数据都必须是可序列化的,   直接或使用数据合同。

这里直接表示类被标记为[Serializable]。关于List<searchResults>,如果searchResults可序列化,则可序列化。要执行此操作,searchResults及其引用的所有类型都必须使用[Serializable]进行标记,或者必须是合适的数据合同,请参阅Using Data ContractsSerializable Types。简而言之,确保该类声明为public,并且它具有公共的无参数构造函数。