首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Currency对象使用ReflectiveTypeAdapter

对Currency对象使用ReflectiveTypeAdapter
EN

Stack Overflow用户
提问于 2021-07-10 14:40:58
回答 1查看 43关注 0票数 0

在较早版本的Gson (<2.5.0)中,反射类型适配器用于反序列化java.util.Currency对象。所以我有这样的东西:"{"currencyCode":"USD"}“持久化在数据库中。

现在,我想将Gson升级到一个更高的版本(它引入了一个新的CurrencyTypeAdapterFactory -它不再能够反序列化我数据库中的对象)。

有没有办法强制Gson对Currency类使用相同的反射类型适配器?

EN

Stack Overflow用户

回答已采纳

发布于 2021-07-10 20:49:03

可以使用类似下面的内容为所需的类提供特定的类型适配器绑定:

代码语言:javascript
复制
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Currency.class, getCurrencyTypeAdapter());
gson = builder.create();

TypeAdapter<Currency> getCurrencyTypeAdapter() {
    ConstructorConstructor constructorConstructor = new ConstructorConstructor(Collections.emptyMap());
    JsonAdapterAnnotationTypeAdapterFactory jsonAdapterFactory = new JsonAdapterAnnotationTypeAdapterFactory(constructorConstructor);
    ReflectiveTypeAdapterFactory reflectiveTypeAdapterFactory = new ReflectiveTypeAdapterFactory(
        constructorConstructor, FieldNamingPolicy.IDENTITY, Excluder.DEFAULT, jsonAdapterFactory);
    return reflectiveTypeAdapterFactory.create(new Gson(), new TypeToken<Currency>() {});
}

这是一种变通方法。理想情况下,您应该修正Currency类的用法,并使用内部使用的默认类型适配器: Currency.getInstance()

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68325343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档