当我尝试并t写我的应用程序时,我在手机上遇到过这种情况。墓碑发行
类型'System.Text.UTF8Encoding'与数据协定名称'UTF8Encoding:http://schemas.datacontract.org/2004/07/System.Text'不是预期的。将任何未知的静态类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。
我没有在我的应用程序中的任何地方使用WCF或数据协定,并且我没有在墓碑上执行任何代码,所以我不确定这是从哪里来的。我的代码中没有任何文本或模式。
在堆栈跟踪中,我没有看到正在执行的任何代码。
System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle) ... at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph) at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter writer, Object graph) at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(Stream stream, Object graph) at Microsoft.Phone.Shell.StreamPersister.Serialize(IDictionary`2 dictionary, IEnumerable`1 knownTypes) at Microsoft.Phone.Shell.StreamPersister.Save(ShellPageManager shellPageManager, String key, IDictionary`2 dictionary, IEnumerable`1 knownTypes) at Microsoft.Phone.Shell.PhoneApplicationService.FireDeactivated() at 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登录等,你可以把它留在手机来处理墓碑。在我的情况下,我需要一个更强大的系统。
你是否在任何地方使用过“Page.State”?或者你有办法重现这个问题? –
我使用ApplicationState在xaml页面上维护我的项目。它包含一些列表的东西。除GeoCoordinate和CookieContainer之外的所有字符串。 – firebellys
在'ApplicationState'中提供类型的元数据可能会有所帮助。 –