【问题标题】:Isolated Storage security exception on windows phonewindows phone 上的隔离存储安全异常
【发布时间】:2011-12-01 23:19:54
【问题描述】:

我试图保留一些数据,但我在这里遇到错误。
在我的公共部分主页类中声明隔离存储

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 was unhandled when using isolated storage
但是我不明白这个人的意思是“存储的类需要被标记为不允许的公共内部”。
你能帮忙的话,我会很高兴。谢谢!

【问题讨论】:

    标签: windows-phone-7 isolatedstorage tombstoning


    【解决方案1】:

    保存到设置时,需要有明确的数据类型。在这种情况下,您只是保存了 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();
    

    这样,序列化器的数据类型非常干净。

    【讨论】:

    • @DiegoVin 更新了我的答案以包含一个示例。
    • 完美运行!几天来,我一直试图将这些数据放入隔离存储中,但没有任何效果,呵呵!昨天我发现我可以将所有 ienumerable 放入 List,但我必须再次迭代所有项目才能放入 List。您的解决方案更清洁!现在,我怎么知道可以序列化哪些集合? ToArray() 方法将 IEnumerable 变成一个数组?所以我可以假设数组可以序列化而 IEnumerables 不能?谢了!
    • 是的,IEnumerable 不能被序列化,因为没有具体的类型可以序列化。无需过多介绍(如果您真的需要,可以在 MSDN 上找到它),序列化程序需要有一个具体类型,其构造函数具有零参数。 IEnumerable 不是一个具体的类型,它是一个接口。 List 是一个具体类型,Array 也是。数组确实是很棒的存储机制,因为它们的大小是固定的,而且开销很小。如果您知道集合大小会发生变化,列表会非常有用,但通常不适合存储。
    • 太棒了!这个信息对我在墓碑收藏方面的问题有很大帮助。再次感谢 =)
    【解决方案2】:

    分配给listbox1.ItemsSource的对象集合是什么?

    我的猜测是它不能被序列化。 SecurityException 表示无法完成序列化,因为它是一个不公开的类。
    更改类的可访问性并确保它可以被序列化。

    【讨论】:

    • Linq to xml 返回一个 IEnumerable,这就是集合。我在墓碑化这些数据时遇到了严重的问题。我什至尝试过你的墓碑助手,但它不适合这个目的......
    • IEnumerable 是什么? Tombstone Helper 仅保留静态数据,人们对其视图模型所做的操作差异太大,无法拥有适用于所有场景的单一解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多