2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以為對(duì)象制作自定義反序列化器,如下所示。
@JsonDeserialize(using = CustomDeserializer::class)
data class MyCustomObject(
var name: String,
var list: List<Int>
)
class CustomDeserializer: JsonDeserializer<MyCustomObject>(){
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): MyCustomObject {
var myList = ArrayList<Int>()
var myName = ""
while(p.nextToken() != JsonToken.END_OBJECT){
if(p.currentName() == "name"){
myName = p.nextTextValue()
}
if(p.currentName().contains("list")){
myList.add(p.nextIntValue(0))
}
}
return MyCustomObject(myName, myList)
}
}
這是用 Kotlin 編寫的,如果您需要我的幫助將其轉(zhuǎn)換為 java,請(qǐng)告訴我。
編輯繼續(xù)為您將其轉(zhuǎn)換為 Java。請(qǐng)?jiān)徣魏五e(cuò)別字:) 如果您有任何問題或問題,請(qǐng)告訴我
@JsonDeserialize(using = CustomDeserializer.class)
public class MyCustomObjectAgain {
private String name;
private List<Integer> myList;
public MyCustomObjectAgain(String name, List<Integer> myList) {
this.name = name;
this.myList = myList;
}
private class CustomDeserializer extends JsonDeserializer<MyCustomObject>{
@Override
public MyCustomObject deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
List<Integer> myList = new ArrayList();
String myName = "";
while(p.nextToken() != JsonToken.END_OBJECT){
if(p.currentName() == "name"){
myName = p.nextTextValue();
}
if(p.currentName().contains("list")){
myList.add(p.nextIntValue(0));
}
}
return new MyCustomObject(myName, myList);
}
}
}

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
如果List你可以考慮@JsonAnySetter并且在你需要的程序中做properties.values()
允許我們靈活地使用 Map 作為標(biāo)準(zhǔn)屬性。在反序列化時(shí),來(lái)自 JSON 的屬性將簡(jiǎn)單地添加到地圖中。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Test {
private String name;
private Map<String, String> properties;
@JsonAnySetter
public void add(String key, String value) {
properties.put(key, value);
}
}
您也可以嘗試List使用@JsonAnySetter
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Test {
private String name;
private List<Integer> properties;
@JsonAnySetter
public void add(String key, Integer value) {
properties.add(value);
}
}
添加回答
舉報(bào)