當我嘗試並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'中提供類型的元數據可能會有所幫助。 –