我正在为一个图像板编写简单的imageviewer。我在我的应用程序中使用这两个类进行导航(Frame.Navigate()
方法的导航参数):
public class KonaParameter
{
public int page { get; set; }
public string tags { get; set; }
public KonaParameter()
{
page = 1;
}
}
public class Post
{
public int id { get; set; }
public string tags { get; set; }
public int created_at { get; set; }
public int creator_id { get; set; }
public string author { get; set; }
public int change { get; set; }
public string source { get; set; }
public int score { get; set; }
public string md5 { get; set; }
public int file_size { get; set; }
public string file_url { get; set; }
public bool is_shown_in_index { get; set; }
public string preview_url { get; set; }
public int preview_width { get; set; }
public int preview_height { get; set; }
public int actual_preview_width { get; set; }
public int actual_preview_height { get; set; }
public string sample_url { get; set; }
public int sample_width { get; set; }
public int sample_height { get; set; }
public int sample_file_size { get; set; }
public string jpeg_url { get; set; }
public int jpeg_width { get; set; }
public int jpeg_height { get; set; }
public int jpeg_file_size { get; set; }
public string rating { get; set; }
public bool has_children { get; set; }
public object parent_id { get; set; }
public string status { get; set; }
public int width { get; set; }
public int height { get; set; }
public bool is_held { get; set; }
public string frames_pending_string { get; set; }
public List<object> frames_pending { get; set; }
public string frames_string { get; set; }
public List<object> frames { get; set; }
public object flag_detail { get; set; }
}
我遇到的问题是暂停不起作用。在await SuspensionManager.SaveAsync();
调用之后,SuspensionManager抛出“SuspensionManager failed”异常(我用谷歌搜索它是因为使用复杂类型)。
我尝试使用string作为导航参数。它有效,但我的参数需要多于1个字符串(List<string>
不起作用,我试图使用它。)
如何正确暂停我的应用程序?
答案 0 :(得分:4)
问题是SuspensionManager使用Frame.GetNavigationState()来获取Frame的历史记录。然后它尝试将导航历史序列化为字符串,遗憾的是,它无法知道如何将自定义复杂类型序列化为Post或KonaParameter之类的参数,并且失败并出现异常。
如果你想使用SuspensionManager,那么你需要将自己限制为像int或string这样的简单类型作为参数。
如果确实需要复杂类型,那么最好将它们存储在带有标识符的后台服务/存储库中。然后,您可以将标识符作为参数传递。
答案 1 :(得分:3)
建议的方法是序列化“状态”对象,以便将其保存/恢复为字符串。您可以使用Json.NET执行此操作:
//save state
Post post = //...;
string state = JsonConvert.Serialize(post)
//restore state
Post post = JsonConvert.Deserialize<Post>(state);
如果你想使用两个对象(一个Post和一个KonaParameter),我会考虑创建一个“聚合”类来封装它们,然后序列化/反序列化:
public class State
{
public Post post {get; set;}
public KonaParameter param {get; set;}
}