我有一个文件,需要在创建新对象时序列化同一个类的多个对象.我无法将它们存储在数组中,因为我需要将对象创建的实例序列化它们.请帮我.
你使用什么序列化机制?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)
| 归档时间: |
|
| 查看次数: |
7375 次 |
| 最近记录: |