Есть две отдельные части:
- извлечение / настройка данных
- сохранение / чтение из файла (или другого места)
Что касается первой части, если вы не можете изменить классы, которые хотите сериализовать / десериализовать, вам действительно просто нужно сделать глубокое копирование с помощью отражения.
Для сериализации просмотрите каждого члена класса, хранящего его значение.
Используйте любой носитель, на котором вы хотите сохранить его, например, XML, и запишите эти значения на диск.
Для десериализации прочитайте значения из файла, создайте новый экземпляр объекта и используйте отражение, чтобы установить все значения.
Если вы получите / установите все элементы, у вас будет объект, который находится в идентичном состоянии. (Возможно, вам понадобится рекурсивно просмотреть все ваши объекты, если у вас есть сложные члены.)
Что касается того, как вы храните данные на диске, то оба XML или двоичные файлы работают. Если вы хотите увидеть его и сделать его читаемым человеком, тогда используйте XML. (Я бы порекомендовал это для вашей первоначальной проверки, поскольку это значительно упростит отладку.)