Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WIN RT中是否存在二进制序列化程序?_C#_Serialization_Microsoft Metro_Windows Runtime - Fatal编程技术网

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

C# WIN RT中是否存在二进制序列化程序?,c#,serialization,microsoft-metro,windows-runtime,C#,Serialization,Microsoft Metro,Windows Runtime,我正在寻找一个二进制序列化程序,因为在我的应用程序中,用户可以发现许多他们想要的项目。假设用户发现了100多个项目(这些项目是从internet下载的),当应用程序挂起时,应用程序无法找到最后一个项目,因为它不存在 在应用程序中发生这种情况是因为我总是加载前10项。但在metro principles中,该应用程序需要恢复一切。。所以我想使用二进制序列化程序来快速保存这些对象。但是我找不到任何能帮助我的课程 编辑: 公共抽象类BaseItem { ... 公共基组{get;set;} } 公共抽

我正在寻找一个二进制序列化程序,因为在我的应用程序中,用户可以发现许多他们想要的项目。假设用户发现了100多个项目(这些项目是从internet下载的),当应用程序挂起时,应用程序无法找到最后一个项目,因为它不存在

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

编辑:

公共抽象类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;}
}