首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个单一的文件,需要随机序列化多个对象。如何在c#中使用?

我有一个单一的文件,需要随机序列化多个对象。如何在c#中使用?
EN

Stack Overflow用户
提问于 2009-05-03 18:10:26
回答 3查看 8K关注 0票数 6

我只有一个文件,需要在创建新对象时序列化同一类的多个对象。我不能将它们存储在数组中,因为我需要在创建对象的实例时序列化它们。请帮帮我。

EN

回答 3

Stack Overflow用户

发布于 2009-05-03 18:59:03

你在使用什么序列化机制?XmlSerializer可能会有问题,因为根节点和名称空间声明之类的东西有点棘手-而且它在部分反序列化方面也不是很好。BinaryFormatter从一开始就非常脆弱--我不推荐在大多数情况下使用它。

一种选择可能是protobuf-net;这是一个二进制序列化程序(使用谷歌的"protocol buffer“格式高效、可移植和版本容忍)。您可以使用Serializer.SerializeWithLengthPrefix将多个对象序列化为一个流。要反序列化相同的项,Serializer.DeserializeItems返回反序列化的项的IEnumerable<T> -或者您可以很容易地将TryDeserializeWithLengthPrefix设置为公共的(它当前是私有的,但源代码是可用的)。

只需在创建每个对象后将其写入文件-完成工作。

如果你想要一个例子,请说-尽管单元测试here给出了一个概述。

它基本上类似于(未测试的):

代码语言:javascript
复制
using(Stream s = File.Create(path))
{
    Serializer.SerializeWithLengthPrefix(s, command1, PrefixStyle.Base128, 0);
    ... your code etc
    Serializer.SerializeWithLengthPrefix(s, commandN, PrefixStyle.Base128, 0);
}
...
using(Stream s = File.OpenRead(path)) {
    foreach(Command command in
           Serializer.DeserializeItems<Command>(s, PrefixStyle.Base128, 0))
    {
       ... do something with command
    }
}
票数 7
EN

Stack Overflow用户

发布于 2009-05-03 18:16:00

请参阅answer here

简而言之,只要将所有内容序列化为相同的文件流,然后反序列化即可。dotNet会知道每个对象的大小

票数 0
EN

Stack Overflow用户

发布于 2009-05-03 20:57:20

对于到达的每个对象,我们将其转换为Base64Encoded字符串,并将其存储为文本文件中的一行。因此,在这个文件中,每行都有一个序列化的对象。在读取时,我们将一次读取一行文件,并将这个Base64编码的字符串反序列化为我们的对象。简单..。因此,让我们尝试一下代码。

http://www.codeproject.com/KB/cs/serializedeserialize.aspx?display=Print

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/817641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档