我试图坚持一些数据,但我在这里得到一个错误。
在公共部分主页类中声明隔离存储
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 to xml来读取它。我在这里读到一个类似的问题:使用隔离存储时未处理SecurityException
但我不明白这个人说的"存储类需要标记为不允许公共内部"是什么意思。
任何帮助都会很好。谢谢!
保存设置时,需要有一个明确的数据类型。在本例中,您只是保存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();
这样,对于序列化器来说,它是一个非常干净的数据类型。
分配给listbox1.ItemsSource
的对象集合是什么?
我猜这是无法序列化的东西。SecurityException表示不能进行序列化,因为它是一个非公共类。
更改类的可访问性,并确保它可以序列化。