Выпуск надгробной плиты

Я испытываю это на своем телефоне, когда пытаюсь замаскировать мое приложение.

Тип '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 альтернативы этому:

  1. Убедитесь, что все, что вы сохраняете, может быть десериализовано DataContractSerializer правильно.
    или же
  2. Выполните сериализацию и десериализацию самостоятельно (с помощью чего-то более быстрого, чем DataContractSerializer, например, json.net) и добавляйте только сериализованные строки в объект состояния.
Другие вопросы по тегам