У меня есть сложная строка json, которую я пытаюсь десериализовать. Вот упрощенный пример (данные, которые я анализирую, гораздо больше вложены, чем это):
{
"content": [
{
"value": {
"name": "name1",
"subvalue": {
"id": "id1"
}
}
},
{
"reference": "mixed"
},
{
"value": {
"name": "name2",
"subvalue": {
"id": "id2"
}
}
}
]
}
Я пытаюсь десериализовать его через собственный десериализатор, и он работает нормально, за исключением того, что он также заполняет массив с пустыми значениями («справочная» часть мне не нужна).
Вот мой класс данных:
@JsonDeserialize(using = ResultDeserializer.class)
class ResultInfo {
public String name;
public String id;
}
Мой пользовательский десериализатор:
class ResultDeserializer extends JsonDeserializer<ResultInfo> {
@Override
public ResultInfo deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
ResultInfo resultInfo = null;
ObjectCodec mapper = jsonParser.getCodec();
JsonNode node = mapper.readTree(jsonParser);
node = node.get("value");
if (node != null) {
resultInfo = new ResultInfo();
resultInfo.name(node.get("name").toString());
resultInfo.id(node.at("/subvalue/id").toString());
}
return resultInfo;
}
}
Однако при заполнении массива с помощью пользовательского десериализатора я получаю нулевые значения в массиве:
final CollectionType collectionType =
TypeFactory
.defaultInstance()
.constructCollectionType(ArrayList.class, ResultInfo.class);
ArrayList<ResultInfo> resultInfos = null;
try {
ObjectReader reader = mapper.readerFor(collectionType);
resultInfos = reader.readValue(rootNode);
} catch (Exception e) {
Log.e(TAG, "Exception:" + e.getMessage());
}
Есть ли для десериализации эквивалент:
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
У меня есть также попытался добавить @JsonInclude(Include.NON_NULL)
в мой класс данных безуспешно.