C# WIN RT中是否存在二进制序列化程序?
我正在寻找一个二进制序列化程序,因为在我的应用程序中,用户可以发现许多他们想要的项目。假设用户发现了100多个项目(这些项目是从internet下载的),当应用程序挂起时,应用程序无法找到最后一个项目,因为它不存在 在应用程序中发生这种情况是因为我总是加载前10项。但在metro principles中,该应用程序需要恢复一切。。所以我想使用二进制序列化程序来快速保存这些对象。但是我找不到任何能帮助我的课程 编辑:C# WIN RT中是否存在二进制序列化程序?,c#,serialization,microsoft-metro,windows-runtime,C#,Serialization,Microsoft Metro,Windows Runtime,我正在寻找一个二进制序列化程序,因为在我的应用程序中,用户可以发现许多他们想要的项目。假设用户发现了100多个项目(这些项目是从internet下载的),当应用程序挂起时,应用程序无法找到最后一个项目,因为它不存在 在应用程序中发生这种情况是因为我总是加载前10项。但在metro principles中,该应用程序需要恢复一切。。所以我想使用二进制序列化程序来快速保存这些对象。但是我找不到任何能帮助我的课程 编辑: 公共抽象类BaseItem { ... 公共基组{get;set;} } 公共抽
公共抽象类BaseItem
{
...
公共基组{get;set;}
}
公共抽象类基组
{
公共IEnumerable项{get;set;}
}
公共密封类FeedDataGroup
{
...
}
公共密封类饲料
{
...
}
我计划序列化一个ObservableCollection。如果我使用JSON,我构建类的方式会有任何问题吗?System.Runtime.Serialization中有一个类,它与您描述的一样。我没有专门使用WinRT的经验,但该类在.NET4.5中可用,因此相信您可以使用它
下面的批评是公平的:我不仅在上面的.Net 4.5之后省略了“core”一词(相当严重地改变了我消息的含义),而且我的评论基于这样一个事实:System.Runtime.Serialization的其他成员将其加入了.Net 4.5 core。看一下,我发现BinaryFormatter被排除在外 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();
}
//同步序列化会话状态以避免异步访问共享会话
//陈述
MemoryStream sessionData=新的MemoryStream();
DataContractSerializer serializer=新的DataContractSerializer(typeof(Dictionary),\u knownTypes);
serializer.WriteObject(sessionData,_sessionState);
//获取SessionState文件的输出流并异步写入状态
StorageFile file=Wait ApplicationData.Current.LocalFolder.CreateFileAsync(sessionStateFilename,CreationCollisionOption.ReplaceExisting);
使用(Stream fileStream=await file.OpenStreamForWriteAsync())
{
sessionData.Seek(0,SeekOrigin.Begin);
等待sessionData.CopyToAsync(fileStream);
等待fileStream.FlushAsync();
}
using System.Runtime.Serialization.Json命名空间中有一个Json序列化程序,如果您需要,它将序列化为Json。
要使用序列化程序,您应该将任何将被序列化的数据标记为datacontract
[DataContract]
public class Serializable
{
[DataMember]
Public string SerializableMember{get;set;}
Public string NonSerializedMember{get;set;}
}
现在可以使用DataContractJsonSerializer将对象序列化为JSON流。
创建的JSON结构如下所示:{“SerializableMember”:{value of data}
没有存储类信息,但成员名称和值都将从类的可序列化成员存储到json对象。
JSON比xml更紧凑,因此它更适合于大型数据集。
我怀疑微软确实从Metro中省略了二进制序列化程序,因为ARM处理器可以是大端和小端,程序员无法控制这一点。二进制序列化是一种选择。它的用法非常简单 仅仅因为它存在于.NET4.5中并不意味着您可以将它与WinRT.NET概要文件一起使用。我不得不否决这个答案,因为,老实说,你似乎不确定它是否可以被使用。@Ramhound,你是对的——这个答案现在没有意义。你能告诉我关于Json的事吗?我真的不知道这个…哦,我明白了,只有一个问题。请注意我的编辑,我喜欢使用BinarySerializer,因为它可以序列化所有内容,但作为我构建类的方式,我怀疑如果使用JSON,您的类设计看起来不会有任何问题。如果内置Json序列化程序存在问题,则应使用Newtonsoft.Json。无论如何,如果您的项目不太可能经常更改,那么最好将您下载的项目的缓存添加到您的服务层中。这样,你的应用程序也可以在没有互联网连接的情况下工作。我可能错了,但我还没有发现比
XmlSerializer
[DataContract]
public class Serializable
{
[DataMember]
Public string SerializableMember{get;set;}
Public string NonSerializedMember{get;set;}
}