Я создаю библиотеку регистрации ошибок, которая создает файл в указанном месте, а затем сохраняет информацию об ошибке в этом файле, которая затем может быть прочитана отдельной программой-указателем, которую я намереваюсь написать вместе с этой библиотекой.Сериализация и десериализация нескольких объектов
Способ сохранения я в двоичном формате (с использованием BinaryFormatter()
и FileStream()
), где я сериализую класс ErrorEntry в файл и добавляю его в конец файла. Это означает, что у меня есть серия ErrorEntries. У меня нет его как списка, потому что, похоже, практически не нужно читать всю информацию в списке из файла, добавлять запись, а затем сохранять ее обратно в файл и выгружать ресурсы. Представляется гораздо более эффективным только сделать только одну команду записи и просто сохранить каждый в качестве своего собственного объекта, который сериализуется.
Моя проблема заключается в том, что я могу найти несколько примеров сериализации списков или отдельных объектов, но ничего не на нескольких, а на отдельных объектах. Хотя я хочу сохранить их как отдельные объекты, когда я их загружаю, я хочу прочитать объект и вернуть серию в виде списка этого объекта. Я думаю, что есть что-то похожее на
while(!EOF)
{
//deserialize each object
//add individual object to a list
}
//return the list of objects
Как бы я хотел бы десериализовать каждый объект из одного файла? Есть ли у него внутренний маркер, который работает выше, и мне просто нужно определить, является ли это окончанием файла, или мне нужно сделать что-то еще, чтобы их прочитать?
Почему вы не просто положить все эти объекты в '' Список
@OndrejTucny он хочет добавить файл без загрузки всех предыдущих записей. – weston
Он сказал, почему и выглядит разумно. Чтобы десериализоваться на уровне объекта, вы должны написать последовательность разделителей после каждой записи и отреагировать на нее при чтении файла. – Tommi