你把解串器的Java對象,你想要得到的JSON映射到:
@JsonDeserialize(using = PropertyValueDeserializer.class)
public class PROPERTY_VALUE implements Serializable{
然後在解串器,你可以如這樣做:
@Override
public PROPERTY_VALUE deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
String tmp = jsonParser.getText(); // {
jsonParser.nextToken();
String key = jsonParser.getText();
jsonParser.nextToken();
String value = jsonParser.getText();
jsonParser.nextToken();
tmp = jsonParser.getText(); // }
PROPERTY_VALUE pv = new PROPERTY_VALUE(key,value);
return pv;
}
如果你不想使用註釋,你需要通過映射器DeserializerProvider
,可以提供給定類型的正確解串器。
mapper.setDeserializerProvider(myDeserializerProvider);
對於構造 - 當然,你可以通過調用解串器內的工廠產生的目標等級:
String value = jsonParser.getText();
jsonParser.nextToken();
tmp = jsonParser.getText(); // }
MyObject pv = MyObjectFactory.get(key);
pv.setValue(value);
return pv;
}
但後來我可能誤解了您的更新
謝謝Heiko。傑克遜默認使用bean的默認構造函數來創建實例。我想要做的是通過使用外部工廠實際創建bean。我會稍後更新一些細節。 – 2011-04-18 10:08:00
如何在不使用註釋的情況下做到這一點? – 2011-04-18 10:13:30
通過使用混合註釋,它不需要直接添加到類本身,而是添加到其他「混合」類。這使得使用第三方庫的註解方法成爲可能。 – StaxMan 2011-04-18 22:51:09