2011-11-30 83 views
2

我試圖保留一些數據,但我在這裏得到一個錯誤。Windows Phone上的孤立的存儲安全異常

System.Security.SecurityException was unhandled 
Message=SecurityException 
:我的公共部分MainPage類

IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 

實施onNavigatedFrom

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

的當我打在模擬器上我得到一個安全異常啓動按鈕內的獨立存儲的
宣言

我的列表框綁定到來自xml的數據。我使用linq to xml來讀取它。

我看過一個類似的問題在這裏:SecurityException was unhandled when using isolated storage
但我無法理解「需要存儲類被標記公開內部不允許」是什麼意思用的人。
任何幫助將是很好的。謝謝!

回答

1

當您保存到設置時,您需要有一個清晰的數據類型。在這種情況下,您只是保存ItemsSource,但實際上在項目源中是什麼?該數據需要公開可知,以便序列化器可以序列化它。列表框中的數據是什麼?它是如何定義的?

IEnumerable(也是這樣)也不能被序列化,因爲序列化程序需要知道將其序列化爲什麼類型。

我建議這樣的代碼:

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

這樣一來,很乾淨的數據類型的序列化。

+0

它是一個可枚舉的 –

+0

@DiegoVin更新了我的答案以包含一個示例。 – McKay

+0

工作完美!我一直試圖將這些數據放入獨立存儲中數天,沒有任何工作嘿!昨天我發現我可以把所有的枚舉放到列表中,但是我不得不迭代所有的項目,然後放入列表中。你的解決方案更清潔!現在,我如何知道可以序列化哪些集合?方法ToArray()將IEnumerable轉換爲數組?所以我可以推定數組可以被序列化並且IEnumerables不能?謝謝! –

0

分配給listbox1.ItemsSource的對象集合是什麼?

我的猜測是它不能被序列化。 SecurityException將指示序列化無法完成,因爲它是一個不公開的類。
更改類的可訪問性並確保它可以序列化。

+0

Linq to xml返回給我一個IEnumerable,這就是集合。 我的墓碑這個數據有嚴重的問題。 我甚至試過了你的墓碑助手,但它沒有用於這個目的...... –

+0

IEnumerable是什麼? 墓碑助手只保留靜態數據,人們用他們的視圖模型做了太多的變化,以獲得適用於每種場景的單一解決方案。 –

+0

這是我在該項目中的另一個類的IEnumerable ... –