Consider this example on the server side:
Foo x = //initialise to some value;
Boo y = // initialise;
Consider the code on the client side. Using the On call, the client will first receive x and after that the client will try deserialise y and provide the handler a new instance of Foo.
This should probably propagate an error instead when y is received on the client.