![](/img/trans.png)
[英]How do I call the default deserializer from a custom deserializer in Jackson
[英]How do I call the default deserializer in a custom deserializer in Jackson?
我有一個JSON對象,有3個不同的對象在使用。
{ // Class A
"name" : "Name",
"list" : {
"names" : { //Class B
"scale1" : { //Class C
"max" : 10,
"min" : 0
},
"scale2" : { //Class C
"max" : 20,
"min" : 15
}
}
} }
A類包含Map <String,Class B>,B類包含Map <String,Class C>。 我遇到的問題是我有一個B類的自定義反序列化器,但我想使用C類的默認反序列化器。
我希望得到這樣的東西:
public class BDeserializer extends JsonDeserializer<B> {
@Override
public B deserialize(JsonParser arg0, DeserializationContext arg1)
throws IOException, JsonProcessingException {
B bObject = new B();
while(!arg0.isClosed()){
C cObject = CDeserializer.deserialize()
bObject.names.add(cObject);
}
return bObject;
} }
但是我不確定傳遞給CDeserializer的參數是什么,或者我是否有機會為C類調用默認的反序列化器。
這些類看起來大致如下:
public class A {
String name;
Map<String,B> list = new HashMap<String,B>();
//getters & setters
}
public class B {
String name;
Map<String,C> fields = new HashMap<String,C>();
//getters & setters
}
public class C {
String name;
long min;
long max;
//getters & setters
}
您可以使用JsonParser
對象來讀取所有屬性。 見下面的例子:
class BJsonDeserializer extends JsonDeserializer<B> {
@Override
public B deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
B result = new B();
result.setFields(new HashMap<String, C>());
while (parser.nextToken() != JsonToken.END_OBJECT) {
String name = parser.getCurrentName();
if ("scale1".equals(name) || "scale2".equals(name) || "anotherProperty".equals(name)) {
parser.nextToken();
result.getFields().put(name, parser.readValueAs(C.class));
}
}
return result;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.