Вам необходимо реализовать собственный десериализатор, который преобразует JSON object
в String
:
class ObjectOrStringJsonDeserializer implements JsonDeserializer<String> {
@Override
public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
if (json.isJsonPrimitive()) {
return json.getAsJsonPrimitive().getAsString();
}
if (json.isJsonObject()) {
return json.getAsJsonObject().toString();
}
return null;
}
}
Вы можете использовать его, как показано ниже:
@SerializedName("card")
@JsonAdapter(ObjectOrStringJsonDeserializer.class)
private String card;
И пример использования:
Gson gson = new GsonBuilder().create();
String json = "{\"card\":{\"success\":false,\"msg\":\"Not found\",\"data\":null}}";
System.out.println(gson.fromJson(json, User.class));
Печать:
User{card='{"success":false,"msg":"Not found","data":null}', qrCode=false}
То же самое вы можете сделать для boolean qrCode
. Вам нужно написать собственный десериализатор, который преобразует JSON object
в boolean
и зарегистрировать его, используя аннотацию @JsonAdapter
.