Ответ 1
Простите меня, если некоторые из того, что я пишу, слишком очевидны,
Прежде всего, пожалуйста! вы должны перестать думать, что вы сериализуете объект... Это просто неверно, поскольку методы, которые являются частью вашего объекта, не сохраняются. Вы сохраняете информацию - и так.. Только DATA.
Сериализация .NET также сериализует имя типа вашего объекта, которое содержит имя сборки и ее версию, поэтому при десериализации - она сравнивает информацию о сохраняемой сборке с типом, который будет отображаться с информацией, - если они не являются то он вернет исключение.
Помимо проблемы с версией - не все может быть легко сериализовано.. попробуйте сериализовать тип System.Drawing.Color, и вы начнете понимать проблемы с более упрощенным механизмом сериализации .NET.
Если вы не планируете сериализовать что-то действительно простое, которое не планирует развиваться, я бы не использовал механизм сериализации, предоставляемый .NET.
Возвращаясь к вашему вопросу, вы можете прочитать здесь о способности к игнорированию версий: http://msdn.microsoft.com/en-us/library/ms229752(v=vs.80).aspx, который предоставляется для BinaryFormatter.
Вы также должны проверить XML-сериализацию, которая обладает хорошими способностями, но самое большое преимущество в том, что вы получаете XML, который читается человеком, поэтому ваши данные никогда не будут потеряны, даже если у вас возникли сложности с версией ваших типов.
Но, наконец, я рекомендую вам либо использовать базу данных с Entity Framework для сохранения ваших данных, либо написать собственный плоский файловый менеджер. В то время как EF очень хорош для большинства решений, иногда вам может понадобиться что-то более легкое, чтобы сохранить что-то очень простое. (я подразумеваю, что я больше не вижу решения, где сериализация .NET может быть релевантной.)
Надеюсь, это поможет, удачи.