当我尝试为我的应用程序墓碑时,我一直在手机上遇到这种情况。
不应使用数据合同名称“UTF8Encoding:http://schemas.datacontract.org/2004/07/System.Text”键入“System.Text.UTF8Encoding”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
我没有在我的应用程序的任何地方使用 WCF 或数据协定,也没有在墓碑上执行任何代码,所以我不确定这是从哪里来的。我的代码中也没有任何文本或模式。
在堆栈跟踪中,我没有看到我的任何代码正在执行。
System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract,XmlWriterDelegator xmlWriter,Object obj,Boolean verifyKnownType,RuntimeTypeHandle 声明的TypeHandle) ... 在 System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer,对象图) 在 System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter 编写器,对象图) 在 System.Runtime.Serialization.XmlObjectSerializer.WriteObject(流流,对象图) 在 Microsoft.Phone.Shell.StreamPersister.Serialize(IDictionary`2 字典,IEnumerable`1 knownTypes) 在 Microsoft.Phone.Shell.StreamPersister.Save(ShellPageManager shellPageManager,字符串键,IDictionary`2 字典,IEnumerable`1 knownTypes) 在 Microsoft.Phone.Shell.PhoneApplicationService.FireDeactivated() 在 Microsoft.Phone.Execution.NativeEmInterop.FireOnPause()
我该如何调试这样的东西?
解决方案:不容易,但在调试菜单中启用异常是一个开始,然后使用 shift+f9 尝试一些值以查看可能导致它的原因。最后的答案是在应用程序关闭之前清除状态,就像这样。
Application_Deactivated or Closing(){
SerializeToPhone(); //save state to phone manually
var appService = PhoneApplicationService.Current;
appService.State.Clear();
}
这样,您就可以清除对象,这样手机就不会尝试为您管理状态。我添加了自己的代码以使用自定义序列化程序将状态保存到手机,并在重新激活时从手机中读取。我认为如果你的应用程序足够简单,只有一些没有网络安全或 Facebook 登录等的字符串和数字,你可以把它留给手机来处理墓碑。就我而言,我需要一个更强大的系统。