Зачем задавать JsonTypeName, если работает и так? Вывод правильный. Возможно дело в более новой версии библиотеки
{"animals":[{"type":"Zoo$Dog","name":"doggy","barkVolume":0.0},{"type":"Zoo$Cat","name":"catty","lives":0}]}