Properly serializing and deserializing a Java Class with Jackson

I’ve got a model RForm that needs to be serialized and deserialized using the Java JSON library Jackson.

The current RForm model is:

public class RForm implements Serializable {

    private ArrayList<Element> pit;
    private ArrayList<Element> match;

    public RForm() {}

    public RForm(ArrayList<Element> pit, ArrayList<Element> match) {
        this.pit = pit;
        this.match = match;
    }
}

Note, I have two ArrayLists that contained Elements. Element is an abstract class and has eight children, when these are being serialized, an object in the Element class could be any of these eight children. I’ve been running into a slew of problems trying to serialize and deserialize these arrays. Here’s the code to serialize:
ObjectMapper mapper = new ObjectMapper();
String serialized = mapper.writeValueAsString(new RForm());
To deserialize:

RForm form = mapper.readValue(serialized, RForm.class);

Here’s the error I’m getting:

error occured: Unexpected token (END_OBJECT), expected FIELD_NAME: missing 
property 'type' that is to contain type id  (for class 
com.cpjd.robluscouter.forms.elements.Element)
08-01 00:03:59.963 14143-14165/? I/System.out:     at [Source: 
java.io.StringReader@49aa883; line: 1, column: 186] (through reference 
chain: com.cpjd.robluscouter.models.RForm["match"])

Here’s the Element class:

@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = 
JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = EBoolean.class, name = "EBoolean"),
    @JsonSubTypes.Type(value = ECheckbox.class, name = "ECheckbox"),
    @JsonSubTypes.Type(value = EChooser.class, name = "EChooser"),
    @JsonSubTypes.Type(value = ECounter.class, name = "ECounter"),
    @JsonSubTypes.Type(value = EGallery.class, name = "EGallery"),
    @JsonSubTypes.Type(value = ESlider.class, name = "ESlider"),
    @JsonSubTypes.Type(value = ESTextfield.class, name = "ESTextfield"),
    @JsonSubTypes.Type(value = EStopwatch.class, name = "EStopwatch"),
    @JsonSubTypes.Type(value = ETextfield.class, name = "ETextfield")
})
public abstract class Element implements Serializable {

private String title;
private int ID;
private boolean modified; // if this is false, we can safely override this value

public Element() {}

Element(String title) {
    this.title = title; modified = false;
}

public abstract String getSubtitle();

}