Warn about types we can't serialize, and skip empty values.

There's little point running the expensive canSerialize() on empty
variants, or sending them to the client for that matter, and we get
quite a few of those here.