gpt4 book ai didi

java - 如何在 Jackson 的自定义解串器中调用默认解串器?

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:34 26 4
gpt4 key购买 nike

我有一个 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 ,B类包含一个Map 。我遇到的问题是我有一个 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;
}
}

关于java - 如何在 Jackson 的自定义解串器中调用默认解串器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com