Windows 8 phone Сохранение и загрузка списка объектов
Я хотел бы сохранить и загрузить свой список истории, заполненный объектами ввода истории. Я пытаюсь сделать это через изолированное хранилище, чтобы, когда пользователь открывает и закрывает приложение, его история посещений не терялась. Он сохраняется, который можно загрузить после нажатия на приложение. Я осмотрелся и увидел этот вопрос на stackru, и я пытался следовать ему, но натолкнулся на такие ошибки. Изолированное хранилище и сохранение нескольких объектов.
Вот код
Класс HistoryEntry
public string URL { get; set; }
public string timestamp { get; set; }
public string date { get; set; }
Код MainPage:
using System.Xml.Serialization;
using System.Collections.ObjectModel;
using System.IO;
List<HistoryEntry> urls = new List<HistoryEntry>();
public HistoryEntry selectedHistory;
public MainPage()
{
InitializeComponent();
Deserialize<>(urls, ???);
}
void Browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
HistoryEntry urlObj = new HistoryEntry();
urlObj.URL = url;
urlObj.timestamp = DateTime.Now.ToString("HH:mm");
urlObj.date = url.Remove(url.LastIndexOf('.'));
urls.Add(urlObj);
textBox1.Text = url;
listBox.ItemsSource = null;
listBox.ItemsSource = urls;
Serialize(urlObj, urls);
}
private static void Serialize(string fileName, object source)
{
var userStore = IsolatedStorageFile.GetUserStoreForApplication();
using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, userStore))
{
XmlSerializer serializer = new XmlSerializer(source.GetType());
serializer.Serialize(stream, source);
}
}
public static void Deserialize<T>(ObservableCollection<T> list, string filename)
{
list = new ObservableCollection<T>();
var userStore = IsolatedStorageFile.GetUserStoreForApplication();
if (userStore.FileExists(filename))
{
using (var stream = new IsolatedStorageFileStream(filename, FileMode.Open, userStore))
{
XmlSerializer serializer = new XmlSerializer(list.GetType());
var items = (ObservableCollection<T>)serializer.Deserialize(stream);
foreach (T item in items)
{
list.Add(item);
}
}
}
}
У Serialize есть несколько недопустимых аргументов, что аналогично тому, когда вызывается De serialize. Каковы соответствующие значения для отправки в метод, и это успешно сохранит и загрузит объекты истории.
Заранее спасибо:)
Если вам нужно больше деталей, пожалуйста, прокомментируйте, и я буду рад объяснить более подробно:)
1 ответ
Вы пробовали этот способ, используя MemoryStream
который он работал для Win 8:
к Serialize
:
MemoryStream sessionData = new MemoryStream();
DataContractSerializer serializer = new
DataContractSerializer(typeof(ObservableCollection<NewsByTag>));
serializer.WriteObject(sessionData, data);
StorageFile file = await ApplicationData.Current.LocalFolder
.CreateFileAsync(sFileName);
using (Stream fileStream = await file.OpenStreamForWriteAsync())
{
sessionData.Seek(0, SeekOrigin.Begin);
await sessionData.CopyToAsync(fileStream);
await fileStream.FlushAsync();
}
к Deserialize
обратно:
StorageFile file = await ApplicationData.Current.LocalFolder.
GetFileAsync(sFileName);
using (IInputStream inStream = await file.OpenSequentialReadAsync())
{
DataContractSerializer serializer =
new DataContractSerializer(typeof(ObservableCollection<NewsByTag>));
var data = (ObservableCollection<NewsByTag>)serializer
.ReadObject(inStream.AsStreamForRead());
}
Надеюсь, поможет!