发布版本的Gson解析问题-返回错误的字符串

问题描述 投票:0回答:3

嗨,我在发布版本中对Gson库有问题。

实际上,在我的应用程序的发行版中,使用new Gson().toJson(obj)方法返回了错误的字符串。

返回的字符串缺少我对象的某些字段。发行版本是否可能需要一些缺少的选项?

以下是一些有用的信息:

  • objArrayList<MyClass>的实例
  • 我正在使用implementation 'com.google.code.gson:gson:2.8.5'
  • 我正在使用Android Studio 3.5.1

MyClass是这样构建的:

public class MyClass{

    @SerializedName("a")
    private String a;

    @SerializedName("b")
    private Integer b;

    @SerializedName("c")
    private String c;

    @SerializedName("d")
    private String d;

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    ...

}

示例:

MyClass example = new MyClass("a","b","c","d");

ArrayList<MyClass> listExample = new ArrayList<MyClass>();
listExample.add(example);

String strObj = new Gson().toJson(listExample);

当前输出:

[ 
   { 
      "b":"b",
      "c":"c",
      "d":"d",
   }
]

预期输出

[ 
   { 
      "a":"a",
      "b":"b",
      "c":"c",
      "d":"d",
   }
]

要重现错误,请遵循github:https://github.com/Ciardini/error02

java android json gson release
3个回答
0
投票

您需要安装@Expose@SerializedName

@Expose
public String a;

0
投票

显然,解析类内部需要toString()方法,才能使Gson库正常工作。

我不知道为什么,但是如果您知道,您可以随时回复!

@Override
public String toString() {
    return "MyClass{" +
            "a='" + a + '\'' +
            ", b='" + b + '\'' +
            ", c='" + c + '\'' +
            ", d='" + d + '\'' +
            '}';
}

0
投票

在发行版中,Android编译器缩小并优化代码[see Android doc]。 R8删除一些显然无用的信息,这些信息对于Gson正确序列化对象是必需的。为了防止R8删除此信息,您需要将以下代码添加到proguard-rules.pro文件中:

-keep class com.giacomociardini.error02.entities.** { <fields>; }

有关其他详细信息,请参考官方Gson GitHub存储库上的此示例。

© www.soinside.com 2019 - 2024. All rights reserved.