尝试反序列化此JSON时,playSequenceDateRanges列表为空
JSON:
{
"first_name": "bob",
"last_name": "smith",
"play_sequence_date_ranges": [
"1 - 07/30/2018 - AL",
"2 - 07/30/2018 - AZ"
],
"addresses": [
{
"line_1": "Street 1",
"city": "City"
}
],
"id": 113
}
Java类:
public class Person implements Comparable<Person > {
@JsonbProperty(value = "play_sequence_date_ranges")
private List<String> playSequenceDateRanges = new ArrayList<>();
@JsonbProperty(value = "first_name")
private String firstName;
@JsonbProperty(value = "last_name")
private String lastName;
private List<Address> addresses = new ArrayList<>();
private Integer id;
...
}
我曾尝试在playSequenceDateRanges中添加反序列化程序和适配器注释(分别为@JsonbTypeDeserializer和@Jsonb TypeAdapter(,以从JSONArray创建字符串列表,但没有什么乐趣;代码甚至在调试时都没有被命中。
反序列化程序:
public class JsonArrayToStringListDeserializer implements JsonbDeserializer<List<String>> {
@Override
public List<String> deserialize(final JsonParser parser, final DeserializationContext ctx, final Type rtType) {
List<String> stringList = new ArrayList<>();
JsonArray jsonArray = parser.getArray();
for (int i = 0; i < jsonArray.size(); i++) {
stringList.add(jsonArray.getString(i));
}
return stringList;
}
}
适配器
public class JsonArrayStringListAdapter implements JsonbAdapter<List<String>, JsonArray> {
@Override
public JsonArray adaptToJson(List<String> obj) throws Exception {
return null;
}
@Override
public List<String> adaptFromJson(JsonArray obj) throws Exception {
Jsonb jsonb = JsonbBuilder.create();
List<String> stringList = jsonb.fromJson((InputStream) obj, new ArrayList<String>(){}.getClass().getGenericSuperclass());
return stringList;
}
}
我使用的是yasson 1.08。
所以这是一个棘手的问题。我不得不为类编写一个javax.json.bind.adapter.JsonbAdapter,将注释添加到类成员中并没有起到任何作用。
亚森对杰森-b的实施让我觉得很糟糕,因为我遇到了杰克逊从未遇到过的问题。