C# 墓碑问题

C# 墓碑问题,c#,windows-phone-7,tombstoning,C#,Windows Phone 7,Tombstoning,当我尝试删除我的应用程序时,我在手机上体验到了这一点 键入“System.Text.UTF8Encoding”和数据协定名称“UTF8Encoding”:http://schemas.datacontract.org/2004/07/System.Text”他说。将任何静态未知的类型添加到已知类型列表中-例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。 我没有在我的应用程序中的任何地方使用WCF或数据契约,也没有

当我尝试删除我的应用程序时,我在手机上体验到了这一点

键入“System.Text.UTF8Encoding”和数据协定名称“UTF8Encoding”:http://schemas.datacontract.org/2004/07/System.Text”他说。将任何静态未知的类型添加到已知类型列表中-例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。

我没有在我的应用程序中的任何地方使用WCF或数据契约,也没有在tombstone上执行任何代码,所以我不确定这是从哪里来的。我的代码中也没有任何文本或模式

在堆栈跟踪中,我没有看到我的任何代码被执行

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()
这样,您可以清除对象,这样手机就不会试图为您管理状态。我已经添加了自己的代码,使用自定义序列化程序将状态保存到手机中,并在重新激活时从手机读取。我认为如果你的应用程序足够简单,只是一些没有网络安全或facebook登录等的字符串和数字,你可以让手机来处理墓碑。在我的例子中,我需要一个更健壮的系统。

听起来你的一个类型中有一个
编码
(或
UTF8Encoding
)变量,该变量正在被自动序列化,以便你的应用程序可以恢复。浏览一下你的代码,看看是否有这样的变量。如果有,下一步是确定您是否真的需要这些变量。

应用程序状态在逻辑删除时使用
DataContractSerializer
进行序列化。听起来您正在添加无法正确去序列化的内容。
有两种替代方案:

  • 确保您正在保存的内容可以由
    DataContractSerializer
    正确反序列化。
  • 自己处理序列化和反序列化(使用比DataContractSerializer更快的工具,如json.net),只向状态对象添加序列化字符串

  • 我看到的唯一一个地方是WMApp清单,我不会编辑它。退出时哪些变量被序列化?是不是每一个对象都还活着并且在范围内?我要说的是,在我从一页移动到另一页的过程中,有一些复杂的项存储在状态中。我把答案贴在上面。你是否在任何地方使用
    Page.State
    ?或者你有办法重现这个问题吗?我使用ApplicationState在xaml页面上维护我的项目。它包含一些列表内容。除了地理坐标和CookieContainer之外的所有字符串。在
    应用程序状态中提供该类型的元数据可能会有所帮助
    是否有办法从调试器获取更多反馈,以了解是什么文本或对象实际导致了这种情况?假设我有大约6个对象,每个对象有20-30个属性,很难区分哪一个是罪魁祸首。我现在有了怀疑。其次,如果在应用程序关闭或唤醒时发生这种情况,我如何替换序列化的方式。我从来没有在运行时看到过这种情况,只有当应用程序关闭时才会看到。我建议你自己序列化,因为这样更容易调试。如果你真的想序列化墓碑上的东西,你必须使用
    激活的
    停用的
    事件来交换放置状态的内容。将添加的更复杂的对象序列化可能会更容易。
    Application_Deactivated or Closing(){
                SerializeToPhone(); //save state to phone manually
                var appService = PhoneApplicationService.Current;
                appService.State.Clear();
    }