WIN RT中是否存在二进制序列化程序

本文关键字:二进制 序列化 程序 存在 是否 RT WIN | 更新日期: 2024-06-14 06:16:56

我正在寻找一个二进制序列化程序,因为在我的应用程序中,用户可以随心所欲地发现许多项。想象一下,用户发现了100多个项目(这些项目是从互联网上下载的),当应用程序暂停时,应用程序无法找到最后一个项目,因为它不存在。

在应用程序中发生这种情况是因为我总是加载前10个项目。但根据metro原则,该应用程序需要恢复所有内容。。所以我想使用二进制序列化程序来快速保存这些对象。但是我找不到任何可以帮助我的课程。

编辑:

public abstract class BaseItem
{
    ...
    public BaseGroup Group { get; set;}
}
public abstract class BaseGroup
{
    public IEnumerable<BaseItem> Items { get; set; }
}
public sealed class FeedDataGroup
{
    ...
}
public sealed class FeedItem
{
    ...
}

我计划序列化一个ObservableCollection。如果我使用JSON,那么我构建类的方式会有什么问题吗?

WIN RT中是否存在二进制序列化程序

Microsoft示例代码使用DataContractSerializer

        // Serialize the session state synchronously to avoid asynchronous access to shared
        // state
        MemoryStream sessionData = new MemoryStream();
        DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes);
        serializer.WriteObject(sessionData, _sessionState);
        // Get an output stream for the SessionState file and write the state asynchronously
        StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(sessionStateFilename, CreationCollisionOption.ReplaceExisting);
        using (Stream fileStream = await file.OpenStreamForWriteAsync())
        {
            sessionData.Seek(0, SeekOrigin.Begin);
            await sessionData.CopyToAsync(fileStream);
            await fileStream.FlushAsync();
        }

在System.Runtime.Serialization中有一个BinaryFormatter类,它可以执行您所描述的操作。我没有专门使用WinRT的经验,但该类在.Net 4.5中可用,所以相信你可以利用它。

下面的批评是公平的:我不仅在上面的.Net 4.5后面省略了"核心"一词(严重改变了我的消息的含义),而且我的评论是基于这样一个事实,即System.Runtime.Serialization的其他成员将其放入了.Net 4.5core。查看4.5和core之间的差异列表,我发现BinaryFormatter被排除在外。

中有一个Json序列化程序正在使用System.Runtime.Serialization.Json命名空间,如果您想要的话,它会序列化为Json。要使用序列化程序,您应该将要序列化的任何数据标记为数据合约

[DataContract]
public class Serializable
{
   [DataMember]
   Public string SerializableMember{get;set;}
   Public string NonSerializedMember{get;set;}
}

现在可以使用DataContractJsonSerializer将对象序列化为JSON流。创建的JSON结构如下所示:{"SerializableMember":{数据值}}没有存储类信息,但成员名称和值都将从类的可序列化成员存储到json对象。JSON比xml更紧凑,所以它更适合大数据集。我怀疑微软确实从Metro中省略了二进制串行器,因为ARM处理器可以是Big和little Endian,程序员无法控制这件事。

一个选项是用于二进制序列化的SharpSerializer。它的用法极其简单。