The Problem
The Reason
The Solution
Instead of using the SerializeField attribute, try using the SerializerReference attribute instead. With this attribute Unity will serialize field values even for abstract and generic types.
In the rare instances where even SerializeReference doesn’t work either (like with dictionaries) you’ll need to handle serialization manually.