What is normally done is to utilize a translatable language to persist stored data in.
Most common, is XML with XSL. The beauty of XML is that you can "Serialize" game state objects TO and FROM XML.
Rule Number 1:
Your Game's Save File Schema/Layout definition WILL change between different versions of games. Why? Because you will want it to, to add cool stuff. And, because you will learn a lot.
So, pick a save file format, optimize it for your game.
As you are making your game, make save files.
Make new features that you want to persist in saved files..
Change your game's save file schema
Make a translation tool that will upgrade your saved file from version .98a to .98b before you even release the game.
In this way, you already know that you can patch your game with a save file fix, (there are a ton of exploits around getting through save file hashes, etc), and you may want to fix this in a version 1 patch anyway.
XML/XSL is my favorite choice. You can digitally sign saved files, use hashes, (in ways that are unhackable), to reduce the risk of people hacking saved files.