2

一部のデータを永続化しようとしていますが、ここでエラーが発生します。
私のパブリックパーシャルメインページクラス内の分離ストレージの宣言

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からのデータにバインドされています。linqtoxmlを使用して読み取ります。

私はここで同様の質問を読みました:分離ストレージを使用するとSecurityExceptionは処理され
ませんでしたが、「ストアされたクラスはパブリック内部を許可されないようにマークする必要がある」という意味を理解できませんでした。
どんな助けでもいいでしょう。どうも!

4

2 に答える 2

1

設定に保存するときは、明確なデータ型が必要です。この場合、ItemsSourceを保存しているだけですが、実際にはItems Sourceには何が含まれていますか?シリアライザーがデータをシリアル化できるように、そのデータは公に知られている必要があります。リストボックスにはどのようなデータがありますか?それはどのように定義されていますか?

IEnumerable(それ自体)もシリアル化できません。これは、シリアライザーがそれをシリアル化するタイプを知る必要があるためです。

次のようなコードをお勧めします:

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

このように、シリアライザーのクリーンなデータ型になります。

于 2011-11-30T16:41:41.073 に答える
0

割り当てられたオブジェクトコレクションは何listbox1.ItemsSourceですか?

私の推測では、それはシリアル化できないものだと思います。SecurityExceptionは、パブリックではないクラスであるため、シリアル化を実行できないことを示します。
クラスのアクセシビリティを変更し、シリアル化できることを確認します。

于 2011-11-30T16:45:09.260 に答える