由于反序列化而获得unauthorizedAccessException。 c#/ Windows phone 8.1

时间:2015-03-18 22:24:58

标签: c# windows-phone-8.1 filestream unauthorizedaccessexcepti

因此,我正在开发一个联系人管理系统,并且我正在尝试添加联系人。我没有在ViewModel之间跳转(联系人和主要联系页面是分开的),而是决定从视图中获取数据,创建联系人,将其添加到列表中,然后序列化该列表。然后,当我回到主页面时,我反序列化该列表。

这种方法很好(没有优化,这只是一个简单的大学项目),因为数据被添加到JSON文件中。我的问题是 - 当我导航回主页面时 - 由于我的流上的UnauthorisedAccessException,列表没有更新。反序列化方法是:

             private async void buildMyListWithJsonAsync(){
            ObservableCollection<Contact> list = new ObservableCollection<Contact>();
            try
            {
                string JSONFILENAME = "contacts.json";
                string content = " ";
                StorageFile File = await ApplicationData.Current.LocalFolder.GetFileAsync(JSONFILENAME);
                using (IRandomAccessStream testStream = await File.OpenAsync(FileAccessMode.Read)){
                    using (DataReader dreader = new DataReader(testStream)){
                        uint length = (uint)testStream.Size;
                        await dreader.LoadAsync(length);
                        content = dreader.ReadString(length);
                        list = JsonConvert.DeserializeObject<ObservableCollection<Contact>>(content);
                    }


                }
                contactlist = new ObservableCollection<Contact>();
                foreach (Contact c in list)
                 contactlist.Add(c); 

            }
            catch (Exception e)
            { e.ToString(); }
        }

任何帮助或帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我冒犯了一个有根据的猜测,问题在于线程和你的ObservableCollection。 ObservableCollections不是线程安全的,并且涉及在他们通常创建的UI线程上引发事件。 StorageFile API都是基于异步线程的。 有机会从异步线程中拉回字符串并在主UI线程上执行序列化和反序列化,这很可能解决它。