Спасибо за все ответы, которые мне удалось сделать, используя ответ @ jb-nizet, используя JsonTypeInfo с JsonSubTypes.
Вот аннотации, которые я использовал:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = D.class, name = "D"),
@JsonSubTypes.Type(value = E.class, name = "E")})
Поскольку я не мог редактировать класс C по причине владения, я использую это с классом mixIn. Вот как я его создал:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = D.class, name = "D"),
@JsonSubTypes.Type(value = E.class, name = "E")})
abstract class CMixIn {
}
Вот как я использовал класс mixIn:
private ObjectMapper objectMapper = new ObjectMapper().addMixIn(C.class, CMixIn.class);
Теперь для сериализации Объекта А класса:
String serializedString = objectMapper.writeValueAsString(a);
Для десериализации вышеуказанной строки:
objectMapper.readValue(serializedString, A.class);