I'm not sure what you are asking. Maybe it is semantics.
In the end, you send a range of bytes, mostly represented as text, to a REST service.
Sending "objects" does not make sense. You "serialize" an object to data in a predefined format and then this data is send to the service.
The data itself, as defined in the format, can represent objects. But the data as a whole is just a range of bytes.
So we have TD objects (UDV's) which must be serialized to a predefined format (data) and then this data must be send to the REST service.
(in your case the data must be formatted as JSON).
To get the needed formatted data from your UDV, you can do this manually where you construct a JSON compatible string containing your data.
Al the UDV's combined will be your JSON body which can be send to the REST service.
You can use the SalJSONSerializeUDV function to do this for you. This function supports both serialize feature AND the send feature.
When you want to use a different way of sending (eg using MSXML library) you can leave the second parameter empty:
A URL to send the serialized data to. If empty, the UDV will be serialized to JSON only, and set to sResult parameter.
If you need to create JSON formatted data from an array of objects, you need to create a class having an array of UDV's.
That will serialize to JSON object having an array of objects.
As for the "Age" in your data.
If you assign NUMBER_Null to AGE, it will be serialized as NULL in the JSON data.
As far as I know, there is no way in TD to leave out the AGE when it is NULL.