我有一个具有以下属性的对象。
private final String messageBundle;
private final List<String> messageParams;
private final String actionBundle;
private final Map<String, String> data;
private final Optional<Pair<Integer,TimeUnit>> ttl;
private final Optional<Integer> badgeNumber;
private final Optional<String> collapseKey;
该对象在库中,我不希望仅为了序列化而修改它,并且希望避免创建另一个DTO的成本。
如何序列化/反序列化Optional属性?Optional没有默认的构造函数(也没有apache commons Pair),但我不能使用InstanceCreator,也不知道如何创建一个TypeAdapter,将序列化委托给底层的Optional内容。
4条答案
按热度按时间cygmwpex1#
作为maaartinus解决方案的补充,没有封装列表的版本,其中
Optional.absent
被简单地序列化为null
:tkqqtvp12#
我将添加到Anton Onikiychuk的答案中
5us2dqdw3#
经过几个小时的gooling和编码-有我的版本:
您可以简单地将其注册到
GsonBuilder
,如下所示:请注意,如果json中没有字段,Gson不会为您类字段设置值,因此您需要在实体中设置默认值
Optional.empty()
8xiog9wr4#
Ilya的解决方案忽略了类型参数,因此在一般情况下不能真正工作。我的解决方案相当复杂,因为需要区分
null
和Optional.absent()
--否则您可以将封装剥离为列表。