Как в C# можно сохранить состояние отдельных объектов?

Как сохранить состояние объектов, я понимаю, что можно написать свои методы сохранения и считывания необходимых данных в том же xml файле, но тогда такие методы придётся создавать для всех классов экземпляры которых нуждаются в сохранении их состояний для использования в будущем, что очень неудобно. Должны же уже быть созданы отдельные классы отвечающие за это, если можно опишите их плюсы и минусы.

Вам нужно использовать сериализацию (сохранение состояния/значений полей объектов) для этого можно использовать следующие классы в C#: XmlSerializer, BinaryFormatter, SoapFormatter (уже практически не используется) либо же Ваш класс объекта должен реализовывать интерфейс ISerializable.

Используйте XmlSerializer - если нужна кроссплатформенность, BinaryFormatter - если программа работает только на Windows и реализуйте интерфейс ISerializable если количество полей для сериализации не оч большое (ненужна сериализация всех полей класса).

Советую почитать информацию о том как работать с данными и классами и интерфейсами на msdn: https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.formatters.binary.binaryformatter?view=netframework-4.7.2,
https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer?view=netframework-4.7.2
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iserializable?view=netframework-4.7.2

или посмотрите видео урок по сериализации, лично мне всё стало понятно после просмотра.