Какой механизм сериализации вы используете? XmlSerializer
может быть проблемой из-за корневого узла и таких вещей, как объявления пространств имен, которые немного сложно найти - плюс это не очень хорошо при частичной десериализации. BinaryFormatter
очень хрупкий для начала - я не рекомендую его в большинстве случаев.
Один из вариантов может быть protobuf-net ; это двоичный сериализатор (использующий формат «протокольных буферов» Google - эффективный, переносимый и совместимый с версией). Вы можете сериализовать несколько объектов в поток с помощью 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
}
}