使用GSON进行序列化时,获取“声明多个名为”的JSON字段时出错

1qczuiv0  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(215)
Type type = new TypeToken<HashMap<String , MovieDb>>() {}.getType();
gson.fromJson(json, type); //ERROR HERE !!!

当我从Json转换到hashmap对象时,它在没有启用minifying的情况下工作得很好,但是当启用minifying时,它在这一行给出了以下错误:

java.lang.IllegalArgumentException: class a.a.a.a.b declares multiple JSON fields named a
        at com.google.b.b.a.i.a(ReflectiveTypeAdapterFactory.java:172)
        at com.google.b.b.a.i.a(ReflectiveTypeAdapterFactory.java:102)
        at com.google.b.e.a(Gson.java:458)
        at com.google.b.b.a.b.a(CollectionTypeAdapterFactory.java:53)
        at com.google.b.e.a(Gson.java:458)
        at com.google.b.b.a.i.a(ReflectiveTypeAdapterFactory.java:117)
        at com.google.b.b.a.i.a(ReflectiveTypeAdapterFactory.java:166)
        at com.google.b.b.a.i.a(ReflectiveTypeAdapterFactory.java:102)
        at com.google.b.e.a(Gson.java:458)
        at com.google.b.b.a.g.a(MapTypeAdapterFactory.java:126)
        at com.google.b.e.a(Gson.java:458)
        at com.google.b.e.a(Gson.java:926)
        at com.google.b.e.a(Gson.java:892)
        at com.google.b.e.a(Gson.java:841)
        at com.techy.nateshmbhat.moviego.i.onPreExecute(MovieInterface.java:180)
        at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:648)
        at android.os.AsyncTask.execute(AsyncTask.java:595)
        at com.techy.nateshmbhat.moviego.i.b(MovieInterface.java:101)
        at com.techy.nateshmbhat.moviego.a.a(Activity_InTheaterMovies.java:55)
xqk2d5yq

xqk2d5yq1#

您的错误很可能是因为您将两个字段缩小为相同的名称a

@SerializedName("a")
Long veryLongFieldName;

@SerializedName("a")
Long anotherVeryLongFieldName;

请注意,它们可以在同一个类中,或者如果使用继承,则它们在同一个继承树中就足够了。Gson不能为一个最小化的字段名a分配两个值。
当然,也可能是您将某个字段最小化为某个其他未最小化字段保留的名称。

9cbw7uwe

9cbw7uwe2#

当我在模型类中有context属性/变量时,我就遇到过这个问题

相关问题