我有一个单一文件,需要随机序列化多个对象。 我怎么能在c#中?

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

你使用什么序列化机制? XmlSerializer可能是一个问题,因为根节点和命名空间声明之类的东西,这有点难以获得 – 加上它在部分反序列化方面并不是很好。 BinaryFormatter开始时非常脆弱 – 在大多数情况下我不推荐它。

一种选择可能是protobuf-net ; 这是一个二进制序列化器(使用谷歌的“协议缓冲”格式 – 高效,可移植和版本容忍)。 您可以使用Serializer.SerializeWithLengthPrefix将多个对象序列化为流。 要反Serializer.DeserializeItems相同的项, Serializer.DeserializeItems返回反Serializer.DeserializeItems项的IEnumerable – 或者您可以轻松地将TryDeserializeWithLengthPrefix公开(它当前是私有的,但源是可用的)。

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

如果你想要一个例子,请说 – 尽管这里的unit testing给出了概述。

它基本上就像(未经测试):

 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(s, PrefixStyle.Base128, 0)) { ... do something with command } } 

见这里的答案。

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

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

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