Are websockets like http requests in that we typically just pass json strings back and forth between client and server, or can they be configured to take custom binary objects, for example could I pass in a native dart object and have it automatically serialized on the client and pushed to the server where it could be deserialized into an object of the same type?