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

6 c# serialization object

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

Mar*_*ell 7

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

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

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

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

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)


Ela*_*ich 0

请参阅此处的答案。

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