I use XML data definitions for a lot of the content in my project.
In effect, my data didn't specifically represent game object instances, but rather Meta classes to represent the definition of the object (keys to determine spritesheet or sfx, initial values for different member variables and the like). At the start I load in all my data, which is pretty light. I store these meta objects in a manager class which can, on request, take the data and give me back an instance of the specific object.
The actual instance objects are much lighter and keep only the mutable data and any logic needed (Position, Color, HP, Rotation, that sort of thing). They may also reference the content object that it was sourced from to reduce data duplication.
It appears you're going a similar path but without the separation between instance object and data representation. Don't know if my way is The Best™ or even really better or good, but it seems to work pretty well.