当导航参数是一个复杂对象时,应用程序在挂起后崩溃
本文关键字:对象 应用程序 崩溃 挂起 复杂 一个 参数 导航 | 更新日期: 2023-09-27 17:54:24
我正在开发一个Windows 8应用程序(Windows Store应用程序)。我有一个有两个导航参数的页面:
if (navigationParameter is int)
{
BindByBoxId(navigationParameter);
}
else if (navigationParameter is Word)
{
BindByWordObject(navigationParameter as Word);
}
当应用程序进入以integer作为导航参数的页面时,在应用程序进入挂起模式后一切正常,但是,当导航参数是一个word对象(复杂对象)时,当OnSuspending
事件处理程序运行时,应用程序崩溃。
通过进一步研究SuspensionManager
类中以下部分代码的问题:
private static void SaveFrameNavigationState(Frame frame)
{
var frameState = SessionStateForFrame(frame);
frameState["Navigation"] = frame.GetNavigationState();
}
问题是' GetNavigationState '。MSDN中方法的描述提到了这样一个事实:
注意这些方法使用的序列化格式仅供内部使用。你的应用不应该对它有任何依赖。此外,这种格式只支持基本类型的序列化,如字符串、字符、数字和GUID类型。
请告诉我如何解决我的问题
我意识到这已经很晚了,但这是未来请求的解决方案:
您需要自己序列化对象。您可以使用像DataContractSerializer
、XmlSerializer
这样的库,或者像Json.NET这样的伟大库之一。然后,保存的对象只是一个字符串。在加载状态下,对字符串进行反序列化,就可以开始了