Выпуск надгробной плиты
Я испытываю это на своем телефоне, когда пытаюсь замаскировать мое приложение.
Тип 'System.Text.UTF8Encoding' с именем контракта данных 'UTF8Encoding:http://schemas.datacontract.org/2004/07/System.Text' не ожидается. Добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных DataContractSerializer.
Я нигде не использую WCF или контракты данных в своем приложении, и я не выполняю никакого кода на надгробной плите, поэтому я не уверен, откуда это исходит. У меня нет ни того, ни другого текста или схемы в моем коде.
В трассировке стека я не вижу, чтобы мой код выполнялся.
System.Runtime.Serialization.XmlObjectSerializerWriteContext.Serialization.XmlObjectSerializer.WriteObject(модуль записи XmlDictionaryWriter, граф объектов) в System.Runtime.Serialization.XmlObjectSerializer.WriteObject(поток потоков, граф объектов) в словаре Microsoft.Phone.Shell.StreamPersister.Serialize(IDictionary`2, известный IEnumey) в Microsoft.Phone.Shell.StreamPersister.Save (ShellPageManager shellPageManager, строковый ключ, словарь IDictionary`2, IEnumerable`1 knownTypes) в Microsoft.Phone.Shell.PhoneApplicationService.FireDeactivation () в Microsoft.Phone.Execution.NativeEmInopF ()
Как мне отладить что-то подобное?
Решение: Не легко, но включение исключения в меню отладки - это начало, затем используйте shift+f9, чтобы опробовать некоторые значения, чтобы увидеть, что может быть причиной. Окончательный ответ - очистить состояние до того, как приложение закроется с чем-то вроде этого.
Application_Deactivated or Closing(){
SerializeToPhone(); //save state to phone manually
var appService = PhoneApplicationService.Current;
appService.State.Clear();
}
Таким образом, вы очищаете объекты, чтобы телефон не пытался управлять состоянием для вас. Я добавил свой собственный код, чтобы сохранить состояние телефона с помощью пользовательских сериализаторов и читать с телефона при повторной активации. Я думаю, что если ваше приложение достаточно простое, просто несколько строк и цифр без веб-безопасности, входа в Facebook и т. Д., Вы можете оставить его на телефоне для обработки надгробий. В моем случае мне нужна была более надежная система.
2 ответа
Похоже, у вас есть Encoding
(или же UTF8Encoding
) переменная одного из ваших типов, которая автоматически сериализуется, чтобы ваше приложение можно было восстановить. Просмотрите ваш код и посмотрите, есть ли где-нибудь подобные переменные. Если есть, то следующий шаг - выяснить, действительно ли вам нужны эти переменные.
ApplicationState сериализуется с DataContractSerializer
когда захоронено. Похоже, вы добавляете что-то, что не может быть правильно десериализовано.
Есть 2 альтернативы этому:
- Убедитесь, что все, что вы сохраняете, может быть десериализовано
DataContractSerializer
правильно.
или же - Выполните сериализацию и десериализацию самостоятельно (с помощью чего-то более быстрого, чем DataContractSerializer, например, json.net) и добавляйте только сериализованные строки в объект состояния.