У меня есть класс, который имеет более десятка свойств. Для большинства свойств примитивного типа я надеюсь использовать стандартные BeanSerializer и BeanDeserializer или что-либо еще, чтобы уменьшить громоздкий код, который мне нужно написать. Для других свойств пользовательских типов и массивов я хочу сделать какой-то собственный сериализатор/десериализатор. Обратите внимание, что я не могу изменить базовую строку JSON. Но у меня есть полный доступ к коду android. Я использую Jackson 1.7.9/Ektorp 1.1.1.
должен ли я подклассифицировать BeanDeserializer? У меня с этим проблемы. Он ожидает конструктор по умолчанию без параметров, но я не знаю, как вызвать суперконструктор.
class MyType{
// a dozen properties with primitive types String, Int, BigDecimal
public Stirng getName();
public void setName(String name);
// properties that require custom deserializer/serializer
public CustomType getCustom();
public void setCustom(CustomType ct);
}
class MyDeserializer extends BeanDeserialzer{
// an exception is throw if I don't have default constructor.
// But BeanDeserializer doesn't have a default constructor
// It has the below constructor that I don't know how to fill in the parameters
public MyDeserializer(AnnotatedClass forClass, JavaType type,
BeanProperty property, CreatorContainer creators,
BeanPropertyMap properties,
Map<String, SettableBeanProperty> backRefs,
HashSet<String> ignorableProps, boolean ignoreAllUnknown,
SettableAnyProperty anySetter) {
super(forClass, type, property, creators, properties, backRefs, ignorableProps,
ignoreAllUnknown, anySetter);
}
@Override
public Object deserialize(JsonParser jp, DeserializationContext dc, Object bean)
throws IOException, JsonProcessingException {
super.deserialize(jp, dc, bean);
MyType c = (MyType)bean;
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readValue(jp, JsonNode.class);
// Use tree model to construct custom
// Is it inefficient because it needs a second pass to the JSON string to construct the tree?
c.setCustom(custom);
return c;
}
}
Я искал в Google, но не смог найти никаких полезных примеров/руководств. Если кто-нибудь может прислать мне несколько работающих примеров, это было бы здорово! Спасибо!