你把解串器的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