Я хочу сохранить коллекцию ObservableCollection, содержащую элементы «Number», в IsolatedStorage на телефоне. Я вызываю методы SaveHistory () и LoadHistory () моего класса FileAcces в App.xaml.cs всякий раз, когда приложение закрывается, активируется, запускается и т. Д. У меня есть глобальная переменная, определенная в App.xaml.cs, которая называется list (ObservableCollection)
При отладке я получаю сообщение об ошибке Исключение InvalidOperationException не обработано ( В XML-документе (3, 4). ) есть ошибка в строке, которая говорит
App.list = (ObservableCollection<Number>)serializer.Deserialize(stream);
(в LoadHistory ())
public class FileAccess
{
public static void SaveHistory()
{
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = store.CreateFile("History.xml"))
{
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<Number>));
serializer.Serialize(stream, App.list);
}
}
}
public static void LoadHistory()
{
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
//Make the file if it doesn't exist.
if (!store.FileExists("History.xml"))
{
IsolatedStorageFileStream file = store.CreateFile("History.xml");
//Dispose of the stream automatically created when creating the file.
file.Close();
file.Dispose();
}
using (IsolatedStorageFileStream stream = store.OpenFile("History.xml", System.IO.FileMode.Open))
{
//If the file isnt empty, then deserialize the xml into Settings objects and load them into the database.
if (stream.Length > 0)
{
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<Number>));
App.list = (ObservableCollection<Number>)serializer.Deserialize(stream);
}
else
{
//If the file is empty, create a new ObservableCollection of Settings class type.
App.list = new ObservableCollection<Number>();
}
}
}
}
}
Содержимое файла XML
<?xml version="1.0"?>
<ArrayOfNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Number>
<numbers>23</numbers>
</Number>
<Number>
<numbers>50</numbers>
</Number>
<Number>
<numbers>14</numbers>
</Number>
<Number>
<numbers>76</numbers>
</Number>
<Number>
<numbers>21</numbers>
</Number>
</ArrayOfNumber>
Согласно Робтиффани , в статье, опубликованной 5 ноября, сериализация наблюдаемой коллекции таким образом должна работать. Что я делаю не так?