children: [
{
o kind: "t3"
data: { // ExampleNodeT3 class should be used for kind == t3
+ t3var1: "val1"
+ t3var2: true
}
}
{
o kind: "t4"
data: { // ExampleNodeT4 class should be used for kind == t4
+ t4var1: false
+ t4var2: 2346
}
}
] ... etc.
@JsonTypeInfo(use=Id.NAME, property="kind")
@JsonSubTypes({
@Type(value=ExampleNodeT3.class, name="t3"),
@Type(value=ExampleNodeT4.class, name="t4")})
public abstract class ExampleNode {
...
public void setData(ExampleNode data) {
this.data = data;
}
これをJacksonでデシリアライズしようとすると、kindNodeデータが作成されたときにJsonTypeInfoヒントが失敗します。これは、「kind」プロパティがその親に関連付けられ、表示されないためです。私はさまざまなバリエーションのファクトリメソッドやJacksonアノテーションを試しましたが、JacksonがExampleNodeオブジェクトを作成してsetData()自体に渡すため、作成するオブジェクトのクラスを制御する場所がありません。デシリアライズ時にサブクラスを決定するために親オブジェクトのプロパティを使用しますか?
どうやら、この機能はできません。機能の拡張がここで要求されました:http://jira.codehaus.org/browse/JACKSON-275 – phreakocious
そして、この問題の詳細はここにあります:http://jackson-users.ning.com/forum/topics/how- commentId = 5286555%3AComment%3A2679 – phreakocious