Here are two solutions that come to mind:
1) Tiles
If you can split your levels in tiles that all have the same dimension, then you could represent your level by an array [width, height] of those tiles.
A tile can represent a floor, a wall, an empty space, whatever. You have one prefab defined in Unity for each of those tiles, allowing you to simply store the structure of your levels in a flat file.
The file structure would be an two-dimensional array of values, each value associated with a prefab. Example: 0 = Nothing, 1 = Floor, etc …
Example:
1 0 2 3 0 0 0
0 1 1 1 0 2 3
0 0 0 2 0 0 0
Then, when you load your level, you simply read the file and instantiate the tile at the position indicated.
2) No Tiles
If you do not want to use tiles, there is another possibility. Each of your levels are defined by a list of prefabs positioned at a certain position, with a certain rotation, and a certain scale. Then, you only need to store in your flat file a list of prefab names, with their position, rotation and scale.
You could write this using your own format, or use XML or JSON, which are useful languages for serializing information.
Writing your own format could look like that:
“Planet1”, (10, 7, -2), (90, 0 ,0), (1, 1, 1)
“Enemy2”, (5, 5, 9), (0, 0, 0), (1, 1, 1)
“Enemy2”, (10, 7, 9), (0, 0, 0), (1, 1, 1)
The first value is the name of the prefab, the second is the position, then comes the rotation and the scale.
When loading a level, your game will read the file and instantiate the prefabs at the correct position.
I hope that helps.