【发布时间】:2020-02-29 15:17:50
【问题描述】:
我有一个复杂的 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) 添加到我的数据类中,但没有成功。
【问题讨论】: