1

我正在使用com.google.code.gson:gson:2.2.4库使用代码将对象转换为 JSON:

String json = new GsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED).create().toJson(object);

并且在 JSON 字符串中,“serialVersionUID”会自动添加Long值,即使它不在模型类中。我只想serialVersionUID从 JSON 中删除。

4

2 回答 2

0

我找到了这个答案。基本上,serialVersionUID 是由 InstantRun 添加的,禁用 InstantRun 为我解决了这个问题。

于 2017-08-28T23:17:09.663 回答
0

解决此问题的一种方法是使用GsonBuilder.excludeFieldsWithoutExposeAnnotation然后使用@Expose注释来显式标记什么是(反)序列化的或不是(反)序列化的。

public class SomeClass {
    private int field1 = 2;
    @Expose private int field2 = 6;
    @Expose @SerializedName ("foo") private int field3 = 12;
}

给你{"field2":6, "foo":12}。该字段field1被排除在外,因为它没有用@Expose.

就个人而言,我总是使用它,GsonBuilder.excludeFieldsWithoutExposeAnnotation因为它会过滤掉任何生成的字段(如上面的Instant Run评论)。如果你没有用 注释它@Expose,它不会被序列化/反序列化。

另一种方法是将字段声明为transient.

于 2017-08-28T23:54:40.980 回答