我正在尝试在 Win 8 商店应用程序中序列化 ObservableCollection。我已经为 Windows Phone 8 应用程序完成了此操作,但我对如何在 Windows 8 中执行此操作有点迷失。
我知道 IsolatedStorageFile 在 Windows 8 中不起作用。我使用 StorageFile 类来实现它,但我不知道如何使用它:-(
以下是我如何在 Windows Phone 8 应用程序中完成此操作的代码:
try
{
DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<NewsByTag>));
using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isf.FileExists(sFileName))
isf.DeleteFile(sFileName);
using (var stream = isf.CreateFile(sFileName))
{
serializer.WriteObject(stream, data);
stream.Close();
}
}
}
...这就是我尝试在 Windows 8 应用商店应用程序中执行的操作:
try
{
DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<NewsByTag>));
StorageFile sfFavourites = await localFolder.CreateFileAsync(sFileName);
using (StorageStreamTransaction sfFav = await sfFavourites.OpenTransactedWriteAsync())
{
serializer.WriteObject(sessioinOutputStream.ToString(), data);
}
}
此外,在 WP8 中我正在序列化为 XML 文件。但是,对于 Windows 8,我不知道什么是最好的。 XML 还是 JSON?
有人有一个很好的例子吗?
任何帮助将非常感激;-)
问候!
最佳答案
你可以这样做 -
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();
}
以这种方式反序列化 -
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());
}
关于c# - 如何在 Windows 8 应用商店应用程序中序列化和反序列化 observableCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468816/