What happens if you need to dynamically discover a service and invoke it? Or does it only work if both ends are known and you can push out change to both end of the wire?
Also, wouldn't something like MessagePack, ION, RION, or CBOR give you payload compression over JSON?