2
我有JSON反序列化的這個特定問題。讓我們來看看這個JSON結構:Jackson:反序列化到集合
{
"header":{
"objects":[
{"field":"value1"},
{"field":"value2"}
]
}
}
JSON結構不能改變,因爲它來自第三方系統。
現在,讓我們這個簡單的POJO:
@JsonDeserialize(using=PojoDeserializer.class)
public class Pojo {
private string field;
//...getter, setter
}
所提PojoDeserializer需要{ 「場」: 「值」} JSON字符串,並將其反序列化的POJO的實例。所以,我可以簡單地做這樣的
POJO的實例=新 ObjectMapper()readValue反序列化( 「{\」 字段\ 「: \」 價值\ 「}」,Pojo.class)。
這是我的問題。讓我們有另一個反序列化器PojosCollectionDeserializer,它接受所提到的結構並將其反序列化爲一個Pojo實例集合。我想使用它以類似的方式與前面的例子中:
Collection<Pojo> pojos = new ObjectMapper().readValue("{...}", Collection.class);
但是,這並不工作,因爲沒有定義的收集應使用PojosCollectionDeserializer創建。有什麼辦法可以實現它嗎?
Jackson如何知道實例化'List對象的'Pojo'實例;'集合?使用運行時類型擦除,我不確定它如何能夠做到這一點。任何見解? –
2011-09-02 18:32:14
類型擦除實際上不是100%完整的:類聲明確實保留了方法和字段聲明以及子類型(「extends Xxx」)聲明的通用類型信息 - 這是Jackson找到內容類型的地方。傳遞Class對象時發生問題;只有List.class,並且沒有「List .class」感謝類型擦除。 –
StaxMan
2011-09-06 15:47:28