/ / Uzyskanie nieautoryzowanego wyjątku dotyczącego wyjątku z powodu deserializacji. c # / Windows phone 8.1 - c #, Windows-phone-8.1, strumień plików, nieautoryzowanyaccesscept

Uzyskanie nieautoryzowanego wyjątku dotyczącego wyjątku z powodu deserializacji. c # / Windows phone 8.1 - c #, Windows-phone-8.1, strumień plików, nieautoryzowanyaccesscept

Tak więc opracowuję system zarządzania kontaktamii próbuję dodać kontakt, zamiast przeskakiwać między ViewModels (kontakt i główna strona kontaktu są oddzielne), zdecydowałem się wziąć dane z widoku, utworzyć kontakt, dodać go do listy, a następnie serializować, lista. Następnie, kiedy wracam do strony głównej, deserializuję tę listę.

To działa dobrze (bez optymalizacji, to tylkoprosty projekt uczelni), ponieważ dane są dodawane do pliku JSON. Mój problem polega na tym, że kiedy wracam do strony głównej, lista nie jest aktualizowana z powodu wyjątku UnauthorisedAccessException w moim strumieniu. Metoda deserializacji to:

             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(); }
}

Każda pomoc lub pomoc będą mile widziane.

Odpowiedzi:

0 dla odpowiedzi № 1

Zaryzykuję wykształcone przypuszczenie, że problem jestwokół wątków i Twojej ObservableCollection. ObservableCollections nie są "bezpieczne dla wątków" i wymagają wywoływania zdarzeń w wątku interfejsu użytkownika, który są tworzone w typowy sposób, a interfejs API programu StorageFile jest oparty na wszystkich wątkach asynchronicznych. Postaraj się wyciągnąć strunę z powrotem z wątku asynchronicznego i zamiast tego wykonaj Serializację i Deserializację głównego wątku UI, a to może również rozwiązać ten problem.