获取 java.lang.IllegalArgumentException:尝试在 Retrofit 中动态更改密钥名称时无法创建转换器

Getting java.lang.IllegalArgumentException: Unable to create converter while trying to dynamiclly change keys name in Retrofit

提问人:gojic 提问时间:3/30/2021 更新时间:3/30/2021 访问量:421

问:

嗨,我试图在我的改造 @SerializedName() 中动态更改密钥。我关注这个主题和这个主题,所以我明白,如果我想使用动态键(使用动态名称)解析JSON,我需要使用HashMap。但没有成功。更糟糕的是,我在调用此端点的 ApiCall 方法上遇到了此异常。此外,当我评论有问题的代码部分时,我的应用程序不会崩溃并获得响应 200,所以这肯定是我在尝试动态解析键名称时做错了什么

这就是我在这个例子中的代码的结构: InvestmentInForceModel -> InvestmentForceRegisteredInvestments-> PercentagesInvestmentInforce

我的 ApiCall

public Observable<InvestmentInForceModel> getInvestmentsInForce(){
    return apiService.getInvestmentsInForce();
}

这是我的 JSON 中有问题的部分:

     "registeredInvestments": {
    "percentages": {
      "2": 12.02,
      "8": 87.98
    },
    "registeredInvestmentsData": [//other json stuff]
}

和我的模型:

    public class InvestmentInForceModel {
    @SerializedName("registeredInvestments")
   private InvestmentForceRegisteredInvestments registeredInvestments;
}

my InvestmentForce注册投资

    @SerializedName("percentages")
    private Map<String,PercentagesInvestmentInforce> stringPercentagesInvestmentInforceMap;

    @SerializedName("registeredInvestmentsData")
    private List<RegisteredInvestmentsDataModel> registeredInvestmentsDataModelList;
}

最后:

    public class PercentagesInvestmentInforce {
   private int investmentsType;
}

私有字段没有@SerializedName因为我不知道该放什么,而且如果服务器没有发送任何内容,这个类也可能是空的,例如这些数字“2”和“8”有时可能只有一个不是 2 或 8 的数字,但如果你明白我想说什么,还有其他一些。

Java Android JSON 改造2

评论

0赞 Mark 3/30/2021
您需要使用向对象添加 a 或有一个模型并稍后转换 - javadoc.io/doc/com.google.code.gson/gson/2.8.0/com/google/gson/...FloatDoublePercentagesInvestmentInforceTypeAdapter<T>TypeAdapterFactoryRetrofitMap<String, Double>
0赞 gojic 3/30/2021
@MarkKeen 我以为 Retrofit 可以将这种结构序列化到地图上?

答: 暂无答案