c# - 如何在 Windows 8 应用商店应用程序中序列化和反序列化 observableCollection?

标签 c# serialization windows-store-apps windows-8.1

我正在尝试在 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/

相关文章:

c# - 在 HttpClient 中将多个 token 添加到 DefaultRequestHeaders.Authorization

c# - 应用程序在基于 .NET 的 COM 对象的 CoCreateInstance 期间挂起

mvvm - Prism.StoreApps中不存在Prism MVVM ValidatableBindableBase

c# - 如何命名使用属性的类?

c# - 为什么服务器端更改没有反射(reflect)在我的应用程序中?

c# - 我可以将单个对象序列化为嵌套的 XML 吗?

json - Ktor:使用List作为多平台中的根目录来序列化/反序列化JSON

.net - 如何在 ASP.NET Web API 中指定我想要 JSON 还是 XML?

windows-store-apps - 如何信任 Windows 商店应用程序中的自签名证书

c# - 使用数据模板和绑定(bind)数据以编程方式创建列表框