我可以将自定义反序列化器应用于GSON的另一个自定义反序列化器中

时间:2016-09-23 15:01:51

标签: java json gson deserialization json-deserialization

以下是一个工作代码,有助于相应地转换Object中的JSON。如果String为values = [ { name: 'Name1', index:0 }, { name: 'Name2', index:1 }, { name: 'Name1', index:2 }, { name: 'Name2', index:3 }, { name: 'Name1', index:4 }, ] // check an array for an object with a matching name property // `some` will return early so you don't need to process the whole array // if a match is found const contains = (name, arr) => arr.some(item => item.name === name) // reduce the array to keep the value contained const output = values.reduce((acc, value) => { if (!contains(value.name, acc)) { return acc.concat(value) } return acc }, []) console.log('first unique', output),则将其视为null。

有2个自定义反序列化器,即nilMyOwnStringDeserializer。我对MyOwnListDeserializer反序列化器不满意,因为它实际上是根据与MyOwnListDeserializer中定义的规则进行字符串比较。但我不能也不知道如何将MyOwnStringDeserializer应用到MyOwnStringDeserializer

有没有办法让我这样做,简化MyOwnListDeserializer?或者甚至更好,如果有一种方法只使用一个自定义反序列化器,仍然可以达到相同的结果?

MyOwnListDeserializer

1 个答案:

答案 0 :(得分:1)

您正在寻找的方法是JsonDeserializationContext.deserialize()。根据有关如何导致无限循环的警告,这将调用您已设置的任何相关自定义反序列化器。

我相信用循环subItems替换循环内MySubItems subItems = context.deserialize(element, MySubItems.class);的初始化将会有效,只留下那个并在循环体中检查list.add(subItems)。< / p>