@tylerlwsmith I'm... Against this?
I think I agree on the principle but not the implementation.
I always whenever possible use only dictionaries, lists, strings, ints, floats, booleans, and null, exactly because then my data structures can be serialized, printed, understood, and hand-edited by default.
I do however agree that the keys used, their types, etc. need to be fully documented along with their meanings/behaviors. The languages (and crucially, docgen systems) that I use make this easy (TypedDict in Python and @/property in jsdoc).
In my (sometimes considered deranged) opinion organizing things into classes and methods is often a mistake.
The biggest actual benefit of this approach beyond serialization is that you design out shared data that would use pointers, which avoids entire classes of shared-state bugs.