Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save pichillilorenzo/21b9bb283ceb606f857481ecd157518a to your computer and use it in GitHub Desktop.
Save pichillilorenzo/21b9bb283ceb606f857481ecd157518a to your computer and use it in GitHub Desktop.
@JsonTypeInfo(), @JsonSubTypes() and @JsonTypeName() example
import { JsonClassType, JsonProperty, ObjectMapper,
JsonTypeInfo, JsonTypeInfoId, JsonTypeInfoAs, JsonSubTypes, JsonTypeName } from 'jackson-js';
@JsonTypeInfo({
use: JsonTypeInfoId.NAME,
include: JsonTypeInfoAs.PROPERTY
})
@JsonSubTypes({
types: [
{class: () => Dog, name: 'dog'},
{class: () => Cat, name: 'cat'},
]
})
class Animal {
@JsonProperty() @JsonClassType({type: () => [String]})
name: string;
constructor(name: string) {
this.name = name;
}
}
@JsonTypeName({value: 'dog'})
class Dog extends Animal { }
@JsonTypeName({value: 'cat'})
class Cat extends Animal { }
const dog = new Dog('Arthur');
const cat = new Cat('Merlin');
const objectMapper = new ObjectMapper();
const jsonData = objectMapper.stringify<Array<Animal>>([dog, cat]);
console.log(jsonData);
// [{"name":"Arthur","@type":"dog"},{"name":"Merlin","@type":"cat"}]
const animals = objectMapper.parse<Array<Animal>>(jsonData, {mainCreator: () => [Array, [Animal]]});
console.log(animals);
/*
[
Dog {
name: 'Arthur'
},
Cat {
name: 'Merlin'
}
]
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment