-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Closed
Labels
Description
I want to deserialize the string to list so I use @JsonAdapter + JsonDeserializer
to solve the problem, but when I try to serialize the List, I get a {}
.
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.annotations.JsonAdapter;
import lombok.Data;
public class Temp {
@Data
public static class DataValue {
@JsonAdapter(ListDeserializer.class)
private List<String> list;
}
public static class ListDeserializer implements JsonDeserializer<List<String>> {
@Override
public List<String> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
if(json.isJsonNull()) {
return null;
}
if (json.isJsonNull()) {
return null;
}
if (json.isJsonArray()) {
Iterator<JsonElement> iter = json.getAsJsonArray().iterator();
final List<String> result = new ArrayList<>();
iter.forEachRemaining(e -> result.add(e.getAsString()));
return result;
}
if (json.isJsonPrimitive()) {
JsonPrimitive jsonPrimitive = (JsonPrimitive) json;
String str = jsonPrimitive.getAsString();
return Arrays.asList(str.split(","));
}
return null;
}
}
public static void main(String[] args) {
GsonBuilder gsonBuilder = new GsonBuilder();
// gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
String json = "{\"list\":\"a,b,c,d,e,f\"}";
DataValue dataValue = gson.fromJson(json, DataValue.class);
// Temp.DataValue(list=[a, b, c, d, e, f])
System.out.println(dataValue);
// {"list":{}}
System.out.println(gson.toJson(dataValue));
}
}