1

我正在开发一个 Windows 8 应用程序(Windows Store 应用程序)。我有一个包含两个导航参数的页面:

if (navigationParameter is int)
{
     BindByBoxId(navigationParameter);
}
else if (navigationParameter is Word)
{
     BindByWordObject(navigationParameter as Word);
}

当应用程序以整数作为导航参数进入页面时,应用程序进入挂起模式后一切正常,但是,当导航参数是单词对象(复杂对象)时,OnSuspending事件处理程序运行时应用程序崩溃。

通过调查类中以下部分代码中的更多问题SuspensionManager

 private static void SaveFrameNavigationState(Frame frame)
 {
      var frameState = SessionStateForFrame(frame);
      frameState["Navigation"] = frame.GetNavigationState();
 }

问题是`GetNavigationState。MSDN中对该方法的描述提到了这个事实:

注意这些方法使用的序列化格式仅供内部使用。您的应用程序不应对其形成任何依赖关系。此外,此格式仅支持基本类型(如字符串、字符、数字和 GUID 类型)的序列化。

请告诉我如何解决我的问题。

4

1 回答 1

1

我意识到这已经很晚了,但这是未来寻求者的解决方案:

您需要自己序列化对象。您可以使用类似DataContractSerializerXmlSerializer或 Json.NET 等众多优秀库之一。然后,保存的对象只是一个字符串。在加载状态下,您可以反序列化字符串,一切顺利。

于 2013-07-18T20:41:34.823 回答