Исключение безопасности изолированного хранилища на Windows Phone - PullRequest
2 голосов
/ 30 ноября 2011

Я пытаюсь сохранить некоторые данные, но я получаю здесь ошибку.
Объявление изолированного хранилища внутри моего публичного частичного класса главной страницы

IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

реализация onNavigatedFrom

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {
        settings.Add("list",listBox1.ItemsSource);
        settings.Save();
    }

Когда я нажимаю кнопку запуска на эмуляторе, я получаю исключение безопасности:

System.Security.SecurityException was unhandled
Message=SecurityException

Мой список привязан к данным, поступающим из XML. Я использую Linq для XML, чтобы прочитать его.

Я прочитал подобный вопрос здесь: SecurityException был необработан при использовании изолированного хранилища
Но я не мог понять, что этот человек имел в виду, что «хранимый класс должен быть помечен как недопустимый.
Любая помощь будет хорошей. Thx!

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Когда вы сохраняете настройки, вам нужно иметь четкий тип данных. В этом случае вы просто сохраняете ItemsSource, но что на самом деле находится в источнике items? Эти данные должны быть общедоступными, чтобы сериализатор мог их сериализовать. Какие данные есть в ListBox? Как это определяется?

IEnumerable (как таковой) также не может быть сериализован, потому что сериализатору необходимо знать, какому типу его сериализовать.

Я бы порекомендовал такой код:

    var data = (IEnumerable<MyDataType>)listBox1.ItemsSource; // perform the cast to get the correct type;
    settings.Add("list", data.ToArray()));
    settings.Save();

Таким образом, у него есть хороший чистый тип данных для сериализатора.

0 голосов
/ 30 ноября 2011

Какой коллекции объектов присвоено listbox1.ItemsSource?

Я предполагаю, что это то, что нельзя сериализовать.SecurityException будет означать, что сериализация не может быть выполнена, потому что это класс, который не является общедоступным.
Измените доступность класса и убедитесь, что он может быть сериализован.

...