Alternative (6): all attributes are returned as JSON values. Rather than get the attribute as the actual type, the User would get the attribute as a string, then use From JSON to convert to type.
One could make VIMs that combine these two steps, and these VIMs might possibly be made to work with non-JSON attributes as well.