I'm not changing a simple, elegant, consistent and commonly-used solution.
Simple = literally two lines of code (1 to save, 1 to load)
Elegant = raw unobscured YAML, what you see is exactly what you get
Consistent = same as 99.9% of the rest
Commonly-used = there are many other objects in the openxcom save file, which are saved in the same way (tip: look at a battlescape save); or look at mod rulesets
Losing these four qualities just to gain a bit of (questionable) human-readability has zero priority for me.
For a correct raw representation, you'd have to make a new class. Considering this object has very limited usage, I agree that adding a new class would be an overkill.
This part is actually what I would even be willing to do.
A class (or struct) overhead doesn't cost too much and adds to c++ code readability too.
Fun fact: this is even currently used for storing data about HWPs (which use a completely different structure than soldiers; again for a good reason).
customVehicleDeployment:
- type: STR_TANK_CANNON
pos:
- 4
- 9
- 1
dir: 0
The biggest issue with your proposed change is not wrapping a few fields into a class (or struct), but changing std::map (YAML dictionary) into std::vector (YAML list), which I'm not willing to do in any case.
At the end of the day, the current solution has overwhelmingly more advantages for me than your counter-proposal and will stay as is.